(This is a random image of showing a Dialog
found on the Internet.)
I've been implementing a custom Dialog
. I could handle almost everything on the dialog except for that default black dim background under the dialog itself, but over the entire screen behind it. Basically I want to change its color and alpha value.
I've been wandering through StackOverflow but only answers I found were about changing background of Dialog
itself. In any case if you need it, here's my simple codes.
public class HTDialog extends Dialog{ public HTDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { super(context, cancelable, cancelListener); requestWindowFeature(Window.FEATURE_NO_TITLE); setCanceledOnTouchOutside(true); setContentView(R.layout.custom_dialog); } }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dialog_root" android:layout_width="match_parent" android:layout_height="match_parent" android:minWidth="280dp" android:background="@drawable/bg_popup" android:paddingTop="20dp"> <ImageView android:id="@+id/dialog_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:src="@drawable/icon" /> </RelativeLayout>
This is a workaround but it's not really a pure solution because background touch is disabled and should be configured manually.
First, set custom dialog theme like this.
<style name="CustomDialogTheme" parent="android:Theme.Dialog"> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">false</item> <item name="android:windowBackground">@android:color/transparent</item> </style>
Setting windowIsFloating
to false forces Dialog
view to be expanded to full screen. Setting windowBackground
to transparent
removes default black dim background under Dialog
. windowNoTitle
option gets rid of the upper title bar.
Apply the theme and construct your custom_dialog
view as follows.
public HTCustomDialog(Context context) { super(context, R.style.CustomDialogTheme); setContentView(R.layout.custom_dialog); }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/main_solid_80"> <RelativeLayout android:id="@+id/dialog_root" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_marginLeft="50dp" android:layout_marginRight="50dp" android:background="@drawable/bg_popup" android:padding="16dp"> </RelativeLayout>
Now that CustomDialog
view is a full-screen view, set background
of your root layout to whatever color you'd like.
I mosaiced the result a bit.
use custom style.
<style name="transparent_dialog_borderless" parent="android:Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> <item name="android:background">#FF333333</item> <item name="android:windowBackground">@null</item> <item name="android:backgroundDimEnabled">true</item> </style>
android:backgroundDimEnabled:control the black dim background
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With