Câu trả lời:
Thêm kiểu sau vào res/values/styles.xml
tệp của bạn (nếu bạn không có, hãy tạo nó.) Đây là một tệp hoàn chỉnh:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
(Giá trị @color/transparent
là giá trị màu #00000000
mà tôi đặt trong res/values/color.xml
tệp. Bạn cũng có thể sử dụng @android:color/transparent
trong các phiên bản Android mới hơn.)
Sau đó, áp dụng kiểu cho hoạt động của bạn, ví dụ:
<activity android:name=".SampleActivity" android:theme="@style/Theme.Transparent">
...
</activity>
android:windowIsFloating
được đặt thành đúng. Xóa thuộc tính này để hoạt động như một hoạt động bình thường (trong trường hợp này nó sẽ khớp android:style/Theme.Translucent.NoTitleBar
)
AppCompatActivity
. Vì vậy, parent="android:Theme"
đã sụp đổ ứng dụng của tôi. Tôi chỉ cần loại bỏ nó và nó làm việc như quyến rũ. Cảm ơn!
Nó như thế này:
<activity android:name=".usual.activity.Declaration" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
50% black should be #7f000000
. Mỗi thành phần (A, R, G, B) có thể lấy giá trị từ 0-255
. 50% of 255 = 127. 127 in Hex = 7F
Đó là cách tính độ trong suốt (độ mờ đục)
Trong tệp kiểu tệp:
<style name="Theme.AppCompat.Translucent" parent="Theme.AppCompat.NoActionBar">
<item name="android:background">#33000000</item> <!-- Or any transparency or color you need -->
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>
Trong AndroidManifest.xml:
<activity
android:name=".WhateverNameOfTheActivityIs"
android:theme="@style/Theme.AppCompat.Translucent">
...
</activity>
Theme.Appcompat.Light.NoActionBar
thay thế.
background
và đưa màu bán trong suốt ưa thích của bạn vàowindowBackground
Khai báo hoạt động của bạn trong bảng kê khai như thế này:
<activity
android:name=".yourActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
Và thêm một nền trong suốt để bố trí của bạn.
Chỉ định chủ đề mờ cho hoạt động mà bạn muốn minh bạch trong tệp kê khai Android của dự án của bạn:
<activity
android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
Tôi muốn thêm vào điều này một chút vì tôi cũng là một nhà phát triển Android mới. Câu trả lời được chấp nhận là rất tốt, nhưng tôi đã gặp phải một số rắc rối. Tôi không chắc chắn làm thế nào để thêm màu vào tệp colors.xml. Đây là cách nó nên được thực hiện:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="class_zero_background">#7f040000</color>
<color name="transparent">#00000000</color>
</resources>
Trong tệp colors.xml gốc của tôi, tôi có thẻ "drawable":
<drawable name="class_zero_background">#7f040000</drawable>
Và vì vậy tôi cũng đã làm điều đó cho màu sắc, nhưng tôi không hiểu rằng tham chiếu "@ color /" có nghĩa là tìm kiếm thẻ "màu" trong XML. Tôi nghĩ rằng tôi cũng nên đề cập đến điều này để giúp đỡ bất cứ ai khác.
Tôi đã đạt được nó trên 2.3.3 bằng cách chỉ cần thêm android:theme="@android:style/Theme.Translucent"
vào thẻ hoạt động trong tệp kê khai.
Tôi không biết về các phiên bản thấp hơn ...
AppCompatActivity
nếu bạn đang sử dụng này.
Trong trường hợp của tôi, tôi phải đặt chủ đề cho thời gian chạy trong java dựa trên một số điều kiện. Vì vậy, tôi đã tạo một chủ đề theo phong cách (tương tự như các câu trả lời khác):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
Sau đó, trong Java tôi đã áp dụng nó vào hoạt động của mình:
@Override
protected void onCreate(Bundle savedInstanceState) {
String email = getIntent().getStringExtra(AppConstants.REGISTER_EMAIL_INTENT_KEY);
if (email != null && !email.isEmpty()) {
// We have the valid email ID, no need to take it from user,
// prepare transparent activity just to perform bg tasks required for login
setTheme(R.style.Theme_Transparent);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
} else
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dummy);
}
Hãy nhớ một điểm quan trọng ở đây: Bạn phải gọi setTheme()
hàm trước super.onCreate(savedInstanceState);
. Tôi đã bỏ lỡ điểm này và bị mắc kẹt trong 2 giờ, suy nghĩ tại sao chủ đề của tôi không được phản ánh trong thời gian chạy.
Trong hàm onCreate , bên dưới setContentView , thêm dòng này:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Cách dễ nhất mà tôi đã tìm thấy là đặt chủ đề của hoạt động trong AndroidManifest thành android:theme="@android:style/Theme.Holo.Dialog"
.
Sau đó, trong phương thức onCreate của hoạt động, hãy gọi getWindow().setBackgroundDrawable(new ColorDrawable(0));
.
Đối với hoạt động hộp thoại, tôi sử dụng:
getWindow().getDecorView().setBackgroundResource(android.R.color.transparent);
Nhưng bạn cũng cần đặt Chế độ xem chính của mình trong hoạt động thành vô hình. Nếu không, nền sẽ vô hình trong khi tất cả các chế độ xem trong đó sẽ hiển thị.
Ngoài các câu trả lời trên:
để tránh sự cố liên quan đến Android Oreo trên hoạt động
<style name="AppTheme.Transparent" parent="@style/Theme.AppCompat.Dialog">
<item name="windowNoTitle">true</item>
<item name="android:windowCloseOnTouchOutside">false</item>
</style>
<activity
android:name="xActivity"
android:theme="@style/AppTheme.Transparent" />
Tôi chỉ làm hai việc, và nó làm cho hoạt động của tôi trở nên minh bạch. Họ ở dưới.
Trong tệp kê khai tôi chỉ cần thêm mã dưới đây vào thẻ hoạt động .
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
Và tôi chỉ đặt nền của bố cục chính cho hoạt động đó là " # 80000000 ". Giống
android:background="#80000000"
Nó hoàn toàn làm việc cho tôi.
Nếu bạn đang sử dụng AppCompatActivity
thì hãy thêm nó vàostyles.xml
<style name="TransparentCompat" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>
Trong manifest
tệp bạn có thể thêm chủ đề này vào thẻ hoạt động như thế này
android:theme="@style/TransparentCompat"
để biết thêm chi tiết đọc bài viết này
Sử dụng Theme.NoDisplay
vẫn sẽ hoạt động nhưng chỉ trên các thiết bị Android cũ hơn. Trên Android 6.0 trở lên, sử dụng Theme.NoDisplay mà không gọi finish()
vào onCreate() (or, technically, before onResume())
sẽ làm hỏng ứng dụng của bạn. Đây là lý do tại sao khuyến nghị nên sử dụng Theme.Translucent.NoTitleBar
, không bị giới hạn này .
Lưu ý 1: Trong thư mục Drawable, tạo test.xml và sao chép mã sau đây
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<stroke android:width="2dp" />
<gradient
android:angle="90"
android:endColor="#29000000"
android:startColor="#29000000" />
<corners
android:bottomLeftRadius="7dp"
android:bottomRightRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp" />
</shape>
// Lưu ý: Góc và hình dạng theo yêu cầu của bạn.
// Lưu ý 2: Tạo xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/test"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.09"
android:gravity="center"
android:background="@drawable/transperent_shape"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
Chỉ cần thêm dòng sau vào thẻ hoạt động trong tệp kê khai của bạn cần nhìn trong suốt.
android:theme="@android:style/Theme.Translucent"
Tất cả những câu trả lời có thể gây nhầm lẫn, có một sự khác biệt giữa Hoạt động trong suốt và Không có hoạt động UI.
Sử dụng cái này:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
Sẽ làm cho hoạt động minh bạch nhưng sẽ chặn UI.
Nếu bạn muốn một hoạt động UI không hơn sử dụng này:
android:theme="@android:style/Theme.NoDisplay"
<item name="android:windowBackground">@android:color/transparent</item>