Как изменить цвет разделителя диалогов предупреждений 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