Dialog with transparent background in Android - android

How do I remove the black background from a dialog box in Android. The pic shows the problem.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);

Add this code
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Or this one instead:
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

TL;DR; You just need two things, firstly in your style do something like:
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">#android:color/transparent</item>
Secondly, make 100% sure said style gets applied to your dialog (maybe by passing to constructor).
Full example
<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>
Use in Java:
Dialog dialog = new Dialog(this, R.style.NewDialog);
I hope helps you !

I've faced the simpler problem and the solution i came up with was applying a transparent bachground THEME. Write these lines in your styles
<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>
And then add
android:theme="#style/Theme.Transparent"
in your main manifest file , inside the block of the dialog activity.
Plus in your dialog activity XML set
android:background= "#00000000"

Somehow Zacharias solution didn't work for me so I have used the below theme to resolve this issue...
<style name="DialogCustomTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
<item name="android:windowBackground">#android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">#null</item>
</style>
One can set this theme to dialog as below
final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme);
Enjoy!!

if you want destroy dark background of dialog , use this
dialog.getWindow().setDimAmount(0);

Dialog pop up fill default black background color or theme color so you need to set TRANSPARENT background into Dialog. Try below code:-
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();

You can use the:
setBackgroundDrawable(null);
method.And following is the doc:
/**
* 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
*/

One issue I found with all the existing answers is that the margins aren't preserved. This is because they all override the android:windowBackground attribute, which is responsible for margins, with a solid color. However, I did some digging in the Android SDK and found the default window background drawable, and modified it a bit to allow transparent dialogs.
First, copy /platforms/android-22/data/res/drawable/dialog_background_material.xml to your project. Or, just copy these lines into a new file:
<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>
Notice that android:color is set to ?attr/colorBackground. This is the default solid grey/white you see. To allow the color defined in android:background in your custom style to be transparent and show the transparency, all we have to do is change ?attr/colorBackground to #android:color/transparent. Now it will look like this:
<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>
After that, go to your theme and add this:
<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>
Make sure to replace newly_created_background_name with the actual name of the drawable file you just created, and replace some_transparent_color with the desired transparent background.
After that all we need to do is set the theme. Use this when creating the AlertDialog.Builder:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);
Then just build, create, and show the dialog as usual!

Attention : Don't use builder for changing background.
Dialog dialog = new Dialog.Builder(MainActivity.this)
.setView(view)
.create();
dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
change to
Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.show();
When using Dialog.builder, it's not giving getWindow() option in it.

Try this in your code:
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
it will definately working...in my case...! my frend

You can use(optional)
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
I would recommend creating an extension function. Something like
extensions.kt
import android.app.Dialog
fun Dialog.setTransparentBackground() {
window?.setBackgroundDrawableResource(android.R.color.transparent)
}
and use it on any dialog by
dialog.setTransparentBackground()
Have some fun programming...

Same solution as zGnep but using xml:
android:background="#null"

This is what I did to achieve translucency with AlertDialog.
Created a custom style:
<style name="TranslucentDialog" parent="#android:style/Theme.DeviceDefault.Dialog.Alert">
<item name="android:colorBackground">#32FFFFFF</item>
</style>
And then create the dialog with:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();

Use this code, it's works for me:
Dialog dialog = new Dialog(getActivity(),android.R.style.Theme_Translucent_NoTitleBar);
dialog.show();

In case you extended the DialogFrament class, you can set the theme with:
setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);
And then make the custom theme in your styles.xml file (see #LongLv's answer for parameters)
Don't forget to add <item name="android:windowCloseOnTouchOutside">true</item> if you want the dialog to close if the user touches outside the dialog.

Set these style code in 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>
And simply change false to true below line
<item name="android:backgroundDimEnabled">true</item>
It will dim your background.

In my case, nothing was working to apply a transparent background.
Only I used in my dialog onStart():
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
But it was not taking any effect. I checked styles.xml, nothing linked to my problem.
Finally, when I was checking how my dialog is gets created I found that the navigation component was creating the dialog whenever I request the dialog fragment.
There In XML of navgraph.xml, I defined the dialog fragment as a fragment so, It was created as a fragment instead of a dialog. Changing that fragment to dialog made everything fall in place.
BTW: You cannot modify from fragment to dialog in the GUI of the navigation editor. You should change by hand in code.
This might be one of a cause when some effect on a dialog is not reflected in runtime.

In my case solution works like this:
final Drawable drawable = new ColorDrawable(android.graphics.Color.TRANSPARENT);
dialogAssignTag.getWindow().setBackgroundDrawable(drawable);
Additionally, in xml file of your custom dialog:
android:alpha="0.8"

Window window = d.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
this is my way, you can try!

For anyone using a custom dialog with a custom class you need to change the transparency in the class add this line in the onCreate():
getWindow().setBackgroundDrawableResource(android.R.color.transparent);

Make sure R.layout.themechanger has no background color because by default the dialog has a default background color.
You also need to add dialog.getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));
And finally
<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>

ColorDrawable drawable = new ColorDrawable(ContextCompat.getColor(ctx, android.R.color.transparent));
dialog.getWindow().setBackgroundDrawable(drawable);

In Kotlin you can use this code:
val dialog = Dialog(context)
dialog.window?.decorView?.background = null

If you use Kotlin, this code can help you:
dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))

Kotlin way to create dialog with transparent background:
Dialog(activity!!, R.style.LoadingIndicatorDialogStyle)
.apply {
// requestWindowFeature(Window.FEATURE_NO_TITLE)
setCancelable(true)
setContentView(R.layout.define_your_custom_view_id_here)
//access your custom view buttons/editText like below.z
val createBt = findViewById<TextView>(R.id.clipboard_create_project)
val cancelBt = findViewById<TextView>(R.id.clipboard_cancel_project)
val clipboard_et = findViewById<TextView>(R.id.clipboard_et)
val manualOption =
findViewById<TextView>(R.id.clipboard_manual_add_project_option)
//if you want to perform any operation on the button do like this
createBt.setOnClickListener {
//handle your button click here
val enteredData = clipboard_et.text.toString()
if (enteredData.isEmpty()) {
Utils.toast("Enter project details")
} else {
navigateToAddProject(enteredData, true)
dismiss()
}
}
cancelBt.setOnClickListener {
dismiss()
}
manualOption.setOnClickListener {
navigateToAddProject("", false)
dismiss()
}
show()
}
Create LoadingIndicatorDialogStyle in style.xml like this:
<style name="LoadingIndicatorDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<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:statusBarColor">#color/black_transperant</item>
<item name="android:layout_gravity">center</item>
<item name="android:background">#android:color/transparent</item>
<!--<item name="android:windowAnimationStyle">#style/MaterialDialogSheetAnimation</item>-->
</style>

Related

AlertDialog button text color with support library v24.2.1

I am having problems with the AlertDialog. The buttons doesn't use the accentColor to set the button text color any more.
I am using the newest support library, v24.2.1. I am styling my dialogs in my styles.xml the following way:
<style name="Base.Theme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:alertDialogTheme">#style/Widget.DialogStyle</item>
<item name="alertDialogTheme">#style/Widget.DialogStyle</item>
</style>
and the Widget.DialogStyle looks like this:
<style name="Widget.DialogStyle" parent="#style/Theme.AppCompat.Light.Dialog.Alert">
<item name="android:colorAccent" tools:targetApi="lollipop">#color/primaryColor</item>
<item name="colorAccent">#color/primaryColor</item>
<item name="android:textColorPrimary">#color/primaryText</item>
<item name="android:textColor">#color/primaryText</item>
<item name="android:background">#color/backgroundColor</item>
<item name="android:textAppearanceLarge">#color/primaryText</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
</style>
On app API's lower than 24 the dialog buttons are colored with the colorAccent but on API 24 this is no more the behaviour (the text is black, should be orange). See the following screenshot.
Is there anybody that knows how to get the accentColor back on the buttons?
Thank you.
For some AlertDialog implementations, the buttons are contained in a ButtonBar and take their style from buttonBarButtonStyle. So you have to override the settings you inherit from the parent theme (Theme.AppCompat.Light.Dialog.Alert).
Add the following item to Widget.DialogStyle:
<item name="buttonBarButtonStyle">#style/MyButtonStyle</item>
and add another style named MyButtonStyle like this:
<style name="MyButtonStyle" parent="Widget.AppCompat.Button.Borderless">
<!-- Set background drawable and text size of the buttons here
<item name="android:background">#color/my_dialog_dark</item>-->
<item name="android:textSize">18sp</item>
<!-- this is the button text color! -->
<item name="android:textColor">#color/primaryColor</item>
</style>
EDIT
Thanks to kirtan403 for pointing this out: you can also use another parent style for the buttons if Widget.AppCompat.Button.Borderless does not meet your requirements.
An example by nicola.v...#icapps.com using Widget.AppCompat.Button.ButtonBar.AlertDialog as parent style for the buttons can be found under the AOSP Issue 220699: colorAccent not applied to AlertDialog buttons on Android N.
Be sure you are importing the correct AlertDialog:
import android.support.v7.app.AlertDialog
Also try inflating the dialog with another AlertDialog.Builder constructor:
android.support.v7.app.AlertDialog.Builder#Builder(android.content.Context, int)
which means, the second parameter is the style of the dialog:
mDialog = new AlertDialog.Builder(context, R.style.Widget.DialogStyle).create();
EDIT:
Sharing the code, that I use to show alert Dialog:
public AlertDialog showSimpleDialog(Context context, String title, String message, String btnOk, DialogInterface.OnClickListener handler) {
if (mDialog != null && mDialog.isShowing()) {
mDialog.dismiss();
mDialog = null;
}
mDialog = new AlertDialog.Builder(context, R.style.AppTheme_Dialog).create();
mDialog.setTitle(title);
mDialog.setMessage(message);
mDialog.setButton(DialogInterface.BUTTON_POSITIVE, btnOk, handler);
mDialog.setCanceledOnTouchOutside(false);
mDialog.show();
return mDialog;
}
and the style:
<style name="AppTheme.Dialog" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">#color/colorPrimary</item> //blue
<item name="android:textColorPrimary">#color/primary_text_material_light</item> //black
<item name="android:windowMinWidthMajor">97%</item>
<item name="android:windowMinWidthMinor">97%</item>
</style>
and the buttons are blue. Tested on emulator API 24.

Transparent dialog doesn't work in some devices

I am using this code to apply a color with trasparent background.
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(MyColor));
Its works very well on my phone, but in my tablet its not working
show that have a white and gray background on my dialig (i use a custom view and background are set #null):
Based on your post, I have some questions that maybe could be causing those issues with transparency.
1.- Since your tablet is showing a different rendering, could be the case that the OS API is below your version on your phone? If that's the case, try using the proper support library that match your phone OS API.
2.- Assuming that both devices are similar on OS API, you could try two different methods.
a) Passing ZERO as parameter for ColorDrawable :)
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(0));
b) Create a Different activity just to display your dialog and isolate the theme related to your parent activity (that for sure that is causing the issue), do something like below.
<style name="Transparent" parent="#android:style/Theme.NoTitleBar">
<item name="android:windowContentOverlay">#null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">#android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
The above is the theme you have to associate to your dialog activity, then on your XML layout use the following.
android:background="#aa000000"
You can apply this approach to dialog, activities that you will require to display a DEMO Screen or instructional :)
You can try this, but it seems this is already suggested...?
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Instead, have you tried something like this?
<style name="TransparentDialogTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
<item name="android:windowBackground">#color/transparent</item>
<item name="android:colorBackgroundCacheHint">#null</item>
</style>
Then, when you make your dialog, try this....?
final Dialog dialog = new Dialog(this, R.style.TransparentDialogTheme);
This is a bit overkill, but may be needed as well if you really need it:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="TransparentDialog" parent="#android:style/Theme.Dialog">
<item name="android:windowFrame">#null</item>
<item name="android:windowBackground">#color/orange_transparent</item>
<item name="android:windowIsFloating">false</item>
<item name="android:windowContentOverlay">#null</item>
<item name="android:windowTitleStyle">#null</item>
<item name="android:colorBackgroundCacheHint">#null</item>
<item name="android:windowAnimationStyle">#android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:gravity">center</item>
</style>
</resources>
The problem is that AlertDialog builder is actually not good for designing transparent dialog and will and always have black background which is actually a Theme for it, instead use the Dialog to create a transparent theme instead.
Sample:
alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
alertDialog.show();
Using Dialog does not require any theme manipulation for transparent background so it is basically easy.
This worked for me:
alertDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
if not, look at this post
USE THIS:
alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
alertDialog.show();
You need disable dim too:
Window w = dialog.getWindow();
w.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
LayoutParams lp = w.getAttributes();
lp.flags &= ~LayoutParams.FLAG_DIM_BEHIND;
lp.dimAmount = 0;
w.setAttributes(lp);
I would suggest just create an activity with transparent background and then you can display whatever you want in your activity based on your requirement and customize it easily. Here is something to get you started
How do I create a transparent Activity on Android?
Helped me a lot while i was trying to achieve something similar for displaying the busy screen within my app. I hope you find this helpful and do let me know which path did you take. Best of luck.
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
This will be fine in api below lolipop and for above or lolipop use
android:background="#android:color/transparent"
in parent layout of dialog fragment, so in a nutsell use both to overcome this issue in all api.
First add a style like this
<style name="customStyleDialog">
<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">true</item>
<item name="android:background">#android:color/transparent</item>
</style>
after that when you creating your dialog you set this style too as follows.
Dialog dialog = new Dialog(getActivity(), R.style.customStyleDialog);
// other settings to the dialog
// for making work transparency on low level devices add next line too after show
// dialog
dialog.show();
dialog.getWindow().setBackgroundDrawable(newColorDrawable(android.graphics.Color.TRANSPARENT));
make sure you add a background color on your view that set to this dialog through
.setContentView(--);
Use theme in dialog.
<style name="Dialog_Transparent" parent="#android:style/Theme.Dialog">
<item name="android:windowFrame">#null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">#android:color/transparent</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowContentOverlay">#null</item>
</style>
public class RProgressDg extends Dialog {
public RProgressDg(Context context) {
this(context, R.style.Dialog_Transparent);
}
public RProgressDg(final Context context, int theme) {
super(context, theme);
this.setContentView(R.layout.dg_pro_round);
}
}
For Kotlin you can change this line to the new line:
old:
Objects.requireNonNull(dialog.window)?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
new:
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))

Android Loading Dialog Set Background with Custom Layout [duplicate]

How do I remove the black background from a dialog box in Android. The pic shows the problem.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Add this code
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Or this one instead:
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
TL;DR; You just need two things, firstly in your style do something like:
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">#android:color/transparent</item>
Secondly, make 100% sure said style gets applied to your dialog (maybe by passing to constructor).
Full example
<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>
Use in Java:
Dialog dialog = new Dialog(this, R.style.NewDialog);
I hope helps you !
I've faced the simpler problem and the solution i came up with was applying a transparent bachground THEME. Write these lines in your styles
<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>
And then add
android:theme="#style/Theme.Transparent"
in your main manifest file , inside the block of the dialog activity.
Plus in your dialog activity XML set
android:background= "#00000000"
Somehow Zacharias solution didn't work for me so I have used the below theme to resolve this issue...
<style name="DialogCustomTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
<item name="android:windowBackground">#android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">#null</item>
</style>
One can set this theme to dialog as below
final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme);
Enjoy!!
if you want destroy dark background of dialog , use this
dialog.getWindow().setDimAmount(0);
Dialog pop up fill default black background color or theme color so you need to set TRANSPARENT background into Dialog. Try below code:-
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();
You can use the:
setBackgroundDrawable(null);
method.And following is the doc:
/**
* 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
*/
One issue I found with all the existing answers is that the margins aren't preserved. This is because they all override the android:windowBackground attribute, which is responsible for margins, with a solid color. However, I did some digging in the Android SDK and found the default window background drawable, and modified it a bit to allow transparent dialogs.
First, copy /platforms/android-22/data/res/drawable/dialog_background_material.xml to your project. Or, just copy these lines into a new file:
<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>
Notice that android:color is set to ?attr/colorBackground. This is the default solid grey/white you see. To allow the color defined in android:background in your custom style to be transparent and show the transparency, all we have to do is change ?attr/colorBackground to #android:color/transparent. Now it will look like this:
<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>
After that, go to your theme and add this:
<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>
Make sure to replace newly_created_background_name with the actual name of the drawable file you just created, and replace some_transparent_color with the desired transparent background.
After that all we need to do is set the theme. Use this when creating the AlertDialog.Builder:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);
Then just build, create, and show the dialog as usual!
Attention : Don't use builder for changing background.
Dialog dialog = new Dialog.Builder(MainActivity.this)
.setView(view)
.create();
dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
change to
Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.show();
When using Dialog.builder, it's not giving getWindow() option in it.
Try this in your code:
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
it will definately working...in my case...! my frend
You can use(optional)
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
I would recommend creating an extension function. Something like
extensions.kt
import android.app.Dialog
fun Dialog.setTransparentBackground() {
window?.setBackgroundDrawableResource(android.R.color.transparent)
}
and use it on any dialog by
dialog.setTransparentBackground()
Have some fun programming...
Same solution as zGnep but using xml:
android:background="#null"
This is what I did to achieve translucency with AlertDialog.
Created a custom style:
<style name="TranslucentDialog" parent="#android:style/Theme.DeviceDefault.Dialog.Alert">
<item name="android:colorBackground">#32FFFFFF</item>
</style>
And then create the dialog with:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();
Use this code, it's works for me:
Dialog dialog = new Dialog(getActivity(),android.R.style.Theme_Translucent_NoTitleBar);
dialog.show();
In case you extended the DialogFrament class, you can set the theme with:
setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);
And then make the custom theme in your styles.xml file (see #LongLv's answer for parameters)
Don't forget to add <item name="android:windowCloseOnTouchOutside">true</item> if you want the dialog to close if the user touches outside the dialog.
Set these style code in 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>
And simply change false to true below line
<item name="android:backgroundDimEnabled">true</item>
It will dim your background.
In my case, nothing was working to apply a transparent background.
Only I used in my dialog onStart():
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
But it was not taking any effect. I checked styles.xml, nothing linked to my problem.
Finally, when I was checking how my dialog is gets created I found that the navigation component was creating the dialog whenever I request the dialog fragment.
There In XML of navgraph.xml, I defined the dialog fragment as a fragment so, It was created as a fragment instead of a dialog. Changing that fragment to dialog made everything fall in place.
BTW: You cannot modify from fragment to dialog in the GUI of the navigation editor. You should change by hand in code.
This might be one of a cause when some effect on a dialog is not reflected in runtime.
In my case solution works like this:
final Drawable drawable = new ColorDrawable(android.graphics.Color.TRANSPARENT);
dialogAssignTag.getWindow().setBackgroundDrawable(drawable);
Additionally, in xml file of your custom dialog:
android:alpha="0.8"
Window window = d.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
this is my way, you can try!
For anyone using a custom dialog with a custom class you need to change the transparency in the class add this line in the onCreate():
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
Make sure R.layout.themechanger has no background color because by default the dialog has a default background color.
You also need to add dialog.getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));
And finally
<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>
ColorDrawable drawable = new ColorDrawable(ContextCompat.getColor(ctx, android.R.color.transparent));
dialog.getWindow().setBackgroundDrawable(drawable);
In Kotlin you can use this code:
val dialog = Dialog(context)
dialog.window?.decorView?.background = null
If you use Kotlin, this code can help you:
dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
Kotlin way to create dialog with transparent background:
Dialog(activity!!, R.style.LoadingIndicatorDialogStyle)
.apply {
// requestWindowFeature(Window.FEATURE_NO_TITLE)
setCancelable(true)
setContentView(R.layout.define_your_custom_view_id_here)
//access your custom view buttons/editText like below.z
val createBt = findViewById<TextView>(R.id.clipboard_create_project)
val cancelBt = findViewById<TextView>(R.id.clipboard_cancel_project)
val clipboard_et = findViewById<TextView>(R.id.clipboard_et)
val manualOption =
findViewById<TextView>(R.id.clipboard_manual_add_project_option)
//if you want to perform any operation on the button do like this
createBt.setOnClickListener {
//handle your button click here
val enteredData = clipboard_et.text.toString()
if (enteredData.isEmpty()) {
Utils.toast("Enter project details")
} else {
navigateToAddProject(enteredData, true)
dismiss()
}
}
cancelBt.setOnClickListener {
dismiss()
}
manualOption.setOnClickListener {
navigateToAddProject("", false)
dismiss()
}
show()
}
Create LoadingIndicatorDialogStyle in style.xml like this:
<style name="LoadingIndicatorDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<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:statusBarColor">#color/black_transperant</item>
<item name="android:layout_gravity">center</item>
<item name="android:background">#android:color/transparent</item>
<!--<item name="android:windowAnimationStyle">#style/MaterialDialogSheetAnimation</item>-->
</style>

Change Android Dialog background to different color

I have a Dialog that I display in my application, but I want to be able to change the semi-transparent black background to be 100% transparent. Like below, the part that grays out the activity behind the dialog, I'd like that to be transparent so that I can see the underlying activity as it, instead of being darkened. Thanks for your help!
I was able to achieve my desired result by creating the Dialog and passing a style to its constructor like so...
Dialog ad = new Dialog(context, R.style.SpinnerDialogDropdown);
<style name="SpinnerDialogDropdown">
<item name="android:windowFrame">#null</item>
<item name="android:windowBackground">#android:color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
**<item name="android:backgroundDimEnabled">false</item>**
</style>

Setting a theme for my custom DialogPreference?

I have a custom DialogPreference that I use for a SeekBar. I override style="#style/Theme.Putio.Dialog" and inflate the layout from XML.
The problem is, the resulting dialog uses the default Android dialog style, and I want it to use mine.
Where do I tell it to use my dialog? I'll post code if necessary.
You can define custom styles for your Dialog inside the styles.xml
<style name="CustomDialogTheme" parent="#android:style/Theme.Dialog">
<item name="android:windowBackground">#drawable/dialogback</item>
<item name="android:windowFrame">#null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowNoTitle">true</item></style>
And to use following code while creating the Dialog.
final Dialog CustomDialog = new Dialog(MyActivity.this,R.style.CustomDialogTheme);

Categories

Resources