How to change dialog background color programmatically?

前端 未结 5 1836
栀梦
栀梦 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: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();
        }
    });
    

提交回复
热议问题