Как да промените цвета на разделителя на диалоговите прозорци за предупреждение на PreferenceFragment

Не мога да разбера как би било възможно да променя цвета на разделителя на предупредителните диалогови прозорци, които се появяват, когато е избрано предпочитание. Знам, че е възможно чрез прилагане на персонализиран клас, който разширява AlertDialog и прави следното в метода show():

int dividerId = getContext().getResources().getIdentifier("android:id/titleDivider", null, null);
View divider = dialog.findViewById(dividerId);
divider.setBackgroundColor(themeColor);

Не знам обаче как да принудя предупредителните диалогови прозорци, които се появяват в PreferenceFragment, да разширят моя персонализиран AlertDialog.

Мога също да използвам стилове, за да променя външния вид на AlertDialog в PreferenceFragment, но няма стилов атрибут, който да съответства на цвета на разделителя за AlertDialogs (следователно трябва да внедря хака за намиране на изгледа на разделителя).

Някой знае ли как може да се постигне това без прилагане на моя собствен PreferenceFragment?

Основната тема за моето приложение е Theme.AppCompat.


person Dan Smith    schedule 01.10.2015    source източник


Отговори (1)


Това е всичко за промяна на цвета в AlertDialog:

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Test Title");
        builder.setMessage(Html.fromHtml("<font color='#FF7F27'>This is a test</font>"));
        builder.setCancelable(false);
        builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });
        builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();
        try {
            Resources resources = dialog.getContext().getResources();
            int alertTitleId = resources.getIdentifier("alertTitle", "id", "android");
            TextView alertTitle = (TextView) dialog.getWindow().getDecorView().findViewById(alertTitleId);
            alertTitle.setTextColor(Color.MAGENTA); // change title text color

            int titleDividerId = resources.getIdentifier("titleDivider", "id", "android");
            View titleDivider = dialog.getWindow().getDecorView().findViewById(titleDividerId);
            titleDivider.setBackgroundColor(Color.YELLOW); // change divider color
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        Button nbutton = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);
        //Set negative button background
        nbutton.setBackgroundColor(Color.MAGENTA);
        //Set negative button text color
        nbutton.setTextColor(Color.YELLOW);
        Button pbutton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
        //Set positive button background
        pbutton.setBackgroundColor(Color.YELLOW);
        //Set positive button text color
        pbutton.setTextColor(Color.MAGENTA);

Това е моят примерен код, но ако искате да промените цвета на разделителя, помислете дали частта от кода започва с "int titleDividerId". Надявам се да помогне.

Резултат:

Това е резултатът от кода

person Mohammad    schedule 30.10.2015