How to change dialog background color programmatically?

前端 未结 5 1825
栀梦
栀梦 2020-12-08 16:30

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

相关标签:
5条回答
  • 2020-12-08 16:37

    Dialogue background colour

    dialog.getWindow().setBackgroundDrawableResource(R.color.glassblack);
    

    really worked fine for me.

    0 讨论(0)
  • 2020-12-08 16:40

    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.

    0 讨论(0)
  • 2020-12-08 16:45

    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 adding dialog.setOnShowListener(this) you will be able to customize your AlertDialog.

    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();
        }
    });
    
    0 讨论(0)
  • 2020-12-08 16:46

    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);
            }
        });
    }
    
    0 讨论(0)
  • 2020-12-08 17:03

    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.

    0 讨论(0)
提交回复
热议问题