Làm cách nào để xóa nền đen khỏi hộp thoại trong Android. Các pic cho thấy vấn đề.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Làm cách nào để xóa nền đen khỏi hộp thoại trong Android. Các pic cho thấy vấn đề.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Câu trả lời:
Thêm mã này
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Hoặc cái này thay thế:
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.getWindow().setBackgroundDrawable(new ColorDrawableResource(R.color.transparent));
dialog.getWindow().setBackgroundDrawableResource(R.color.transparent);
<style name="NewDialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowTitleStyle">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:background">@android:color/transparent</item>
</style>
sử dụng trong java
Dialog dialog = new Dialog(this, R.style.NewDialog);
Tôi hy vọng giúp bạn!
Tôi đã phải đối mặt với vấn đề đơn giản hơn và giải pháp tôi đưa ra là áp dụng THEME bachground minh bạch. Viết những dòng này theo phong cách của bạn
<item name="android:windowBackground">@drawable/blue_searchbuttonpopupbackground</item>
</style>
<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>
Và sau đó thêm
android:theme="@style/Theme.Transparent"
trong tệp kê khai chính của bạn, bên trong khối hoạt động hộp thoại.
Cộng với bộ XML hoạt động hộp thoại của bạn
android:background= "#00000000"
Bằng cách nào đó, giải pháp Zacharias không hiệu quả với tôi vì vậy tôi đã sử dụng chủ đề dưới đây để giải quyết vấn đề này ...
<style name="DialogCustomTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
</style>
Người ta có thể đặt chủ đề này vào hộp thoại như bên dưới
final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme);
Thưởng thức!!
Bạn có thể dùng:
setBackgroundDrawable(null);
Phương thức. Và sau đây là tài liệu:
/**
* Set the background to a given Drawable, or remove the background. If the
* background has padding, this View's padding is set to the background's
* padding. However, when a background is removed, this View's padding isn't
* touched. If setting the padding is desired, please use
* {@link #setPadding(int, int, int, int)}.
*
* @param d The Drawable to use as the background, or null to remove the
* background
*/
Hộp thoại bật lên điền màu nền đen mặc định hoặc màu chủ đề để bạn cần đặt TRANSPARENT
nền vào Hộp thoại. Hãy thử mã dưới đây: -
final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setContentView(R.layout.splash);
dialog.show();
Nếu bạn muốn phá hủy nền tối của hộp thoại, hãy sử dụng cái này
dialog.getWindow().setDimAmount(0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Objects.requireNonNull(alertDialog.getWindow()).setDimAmount(0); }
Một vấn đề tôi tìm thấy với tất cả các câu trả lời hiện có là lề không được bảo tồn. Điều này là do tất cả chúng ghi đè lên android:windowBackground
thuộc tính, chịu trách nhiệm cho các lề, với một màu sắc vững chắc. Tuy nhiên, tôi đã thực hiện một số thao tác đào trong SDK Android và tìm thấy nền cửa sổ mặc định có thể vẽ được và sửa đổi nó một chút để cho phép các hộp thoại trong suốt.
Đầu tiên, sao chép / pl Platforms / android-22 / data /res /drawable / dialog_background_m vật liệu vào dự án của bạn. Hoặc, chỉ cần sao chép các dòng này vào một tệp mới:
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:inset="16dp">
<shape android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="?attr/colorBackground" />
</shape>
</inset>
Lưu ý rằng android:color
được đặt thành ?attr/colorBackground
. Đây là màu xám / trắng mặc định mà bạn nhìn thấy. Để cho phép màu được xác định trong android:background
kiểu tùy chỉnh của bạn trong suốt và hiển thị độ trong suốt, tất cả những gì chúng ta phải làm là thay đổi ?attr/colorBackground
thành @android:color/transparent
. Bây giờ nó sẽ trông như thế này:
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:inset="16dp">
<shape android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="@android:color/transparent" />
</shape>
</inset>
Sau đó, đi đến chủ đề của bạn và thêm điều này:
<style name="MyTransparentDialog" parent="@android:style/Theme.Material.Dialog">
<item name="android:windowBackground">@drawable/newly_created_background_name</item>
<item name="android:background">@color/some_transparent_color</item>
</style>
Đảm bảo thay thế newly_created_background_name
bằng tên thật của tệp có thể vẽ bạn vừa tạo và thay thế some_transparent_color
bằng nền trong suốt mong muốn.
Sau đó, tất cả những gì chúng ta cần làm là thiết lập chủ đề. Sử dụng cái này khi tạo AlertDialog.Builder
:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);
Sau đó, chỉ cần xây dựng, tạo và hiển thị hộp thoại như bình thường!
Đây là những gì tôi đã làm để đạt được độ trong mờ với AlertDialog.
Tạo một phong cách tùy chỉnh:
<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
<item name="android:colorBackground">#32FFFFFF</item>
</style>
Và sau đó tạo hộp thoại với:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();
Trong trường hợp của tôi, giải pháp hoạt động như thế này:
dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Và ngoài ra trong Xml của hộp thoại tùy chỉnh:
android:alpha="0.8"
sử dụng mã này nó hoạt động với tôi:
Dialog dialog = new Dialog(getActivity(),android.R.style.Theme_Translucent_NoTitleBar);
dialog.show();
Đặt các mã kiểu này theo kiểu
<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>
Và chỉ cần thay đổi sai thành đúng bên dưới dòng
<item name="android:backgroundDimEnabled">true</item>
Nó sẽ làm mờ nền của bạn.
Chú ý: Không sử dụng trình xây dựng để thay đổi nền.
Dialog dialog = new Dialog.Builder(MainActivity.this)
.setView(view)
.create();
dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
thay đổi thành
Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.show();
Khi sử dụng Dialog.builder, nó không cung cấp getWindow()
tùy chọn trong đó.
Window window = d.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
đây là cách của tôi, bạn có thể thử!
Trong trường hợp bạn mở rộng DialogFrament
lớp, bạn có thể đặt chủ đề với:
setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);
Và sau đó tạo chủ đề tùy chỉnh trong tệp tệp kiểu tệp của bạn (xem câu trả lời của @ LongLv để biết thông số)
Đừng quên thêm <item name="android:windowCloseOnTouchOutside">true</item>
nếu bạn muốn hộp thoại đóng nếu người dùng chạm bên ngoài hộp thoại.
Đối với bất kỳ ai sử dụng hộp thoại tùy chỉnh với lớp tùy chỉnh, bạn cần thay đổi độ trong suốt của lớp, thêm dòng này vào onCreate ():
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
Đảm bảo R.layout.themechanger
không có màu nền vì theo mặc định, hộp thoại có màu nền mặc định.
Bạn cũng cần thêm dialog.getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));
Và cuối cùng
<style name="TransparentDialog">
<item name="android:windowIsFloating">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowTitleStyle">@null</item>
</style>