I have a main activity where users can change (via preferences) the background colour to their favourite colour. My problem is that I can not change the background colour o
Dialogue background colour
dialog.getWindow().setBackgroundDrawableResource(R.color.glassblack);
really worked fine for me.
I found a one rule solution!
d.getWindow().setBackgroundDrawableResource(R.drawable.menubackground);
It works for me with a normal dialog.
But I dont know if it works on an AlertDialog
.
I have found a hack, without creating custom layout you can create multiple designs by playing with some properties of AlertDialog
.
What you have to do:
When
AlertDialog
is visible on your screen,OnShowListener
is called. So, by addingdialog.setOnShowListener(this)
you will be able to customize yourAlertDialog
.
Code:
// Create AlertDialog
AlertDialog.Builder adb = new AlertDialog.Builder(context1);
adb.setTitle(context1.getString(R.string.app_name))
.setMessage(message)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog dialog = adb.create();
// Make some UI changes for AlertDialog
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(final DialogInterface dialog) {
// Add or create your own background drawable for AlertDialog window
Window view = ((AlertDialog)dialog).getWindow();
view.setBackgroundDrawableResource(R.drawable.your_drawable);
// Customize POSITIVE, NEGATIVE and NEUTRAL buttons.
Button positiveButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_POSITIVE);
positiveButton.setTextColor(context1.getResources().getColor(R.color.primaryColor));
positiveButton.setTypeface(Typeface.DEFAULT_BOLD);
positiveButton.invalidate();
Button negativeButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEGATIVE);
negativeButton.setTextColor(context1.getResources().getColor(R.color.primaryColor));
negativeButton.setTypeface(Typeface.DEFAULT_BOLD);
negativeButton.invalidate();
Button neutralButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEUTRAL);
neutralButton.setTextColor(context1.getResources().getColor(R.color.primaryColor));
neutralButton.setTypeface(Typeface.DEFAULT_BOLD);
neutralButton.invalidate();
}
});
The suggested solution
d.getWindow().setBackgroundDrawableResource(R.drawable.menubackground);
Do not work well (tested in 6.0) as it changes the dialog shadow
Here Is my solution:
public static void changeDialogBackground(final Dialog dialog,final int resId) {
dialog.getWindow().getDecorView().setBackgroundResource(resId);
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(final DialogInterface dialog) {
Window window = ((AlertDialog)dialog).getWindow();
window.getDecorView().setBackgroundResource(resId);
}
});
}
I kinda faced the same problem. And the only way to solve it was extending my own version of layout. I see that in your case it is an AlertDialog. What I recommend you to do, is to create a unique class, that is your customized AlertDialog and create a layout for this, and then you inflate this.
Here is a post that helped me a lot. http://blog.androgames.net/10/custom-android-dialog/
I followed this post and solved my problem with customizing dialogs.
Please, if you have more doubts, let me know.
Thanks.