Android: цвет / стиль DialogPreference?

Моя основная "@android:style/Theme.Light" предпочтения настроена на "@android:style/Theme.Light" . Одним из моих предпочтений является DialogPreference, у которого Dialog содержит ListView. Диалоговое окно ListView темно-серого (потому что DialogPreference использует AlertBuilder, который создает темно-серые диалоги), а текст в списке черный (поскольку Theme.Light вызывает listViews с черным текстом). Есть ли простой способ заставить ListView вести себя с тем же стилем, что и темный диалог? Или заставить темное диалоговое окно вести себя в том же стиле, что и активность света?

РЕДАКТИРОВАТЬ:

Основываясь на комментариях Мерлина, кажется, что я должен попытаться создать тему LightDialog. Для этого я попытался: 1. расширить тему android's Theme.Light и добавить свойства dialogy из Theme.Dialog

 <style name="Theme.LightDialog" parent="@android:style/Theme.Light"> <item name="android:windowFrame">@null</item> <item name="android:windowTitleStyle">@android:style/DialogWindowTitle</item> <item name="android:windowBackground">@android:drawable/panel_background</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> </style> 

… и 2. расширение темы android. Dialog и добавление светлых свойств в Theme.Light.

  <style name="Theme.LightDialog" parent="@android:style/Theme.Dialog"> <item name="android:windowBackground">@drawable/screen_background_light</item> <item name="android:colorBackground">@android:color/background_light</item> <item name="android:colorForeground">@androidcolor/bright_foreground_light</item> <item name="android:colorForegroundInverse">@android:color/bright_foreground_light_inverse</item> <item name="android:textColorPrimary">@android:color/primary_text_light</item> <item name="android:textColorSecondary">@android:color/secondary_text_light</item> <item name="android:textColorTertiary">@android:color/tertiary_text_light</item> <item name="android:textColorPrimaryInverse">@android:color/primary_text_dark</item> <item name="android:textColorSecondaryInverse">@android:color/secondary_text_dark</item> <item name="android:textColorTertiaryInverse">@android:color/tertiary_text_dark</item> <item name="android:textColorPrimaryDisableOnly">@android:color/primary_text_light_disable_only</item> <item name="android:textColorPrimaryInverseDisableOnly">@android:color/primary_text_dark_disable_only</item> <item name="android:textColorPrimaryNoDisable">@android:color/primary_text_light_nodisable</item> <item name="android:textColorSecondaryNoDisable">@android:color/secondary_text_light_nodisable</item> <item name="android:textColorPrimaryInverseNoDisable">@android:color/primary_text_dark_nodisable</item> <item name="android:textColorSecondaryInverseNoDisable">@android:color/secondary_text_dark_nodisable</item> <item name="android:textColorHint">@android:color/hint_foreground_light</item> <item name="android:textColorHintInverse">@android:color/hint_foreground_dark</item> </style> 

Обе эти попытки потерпели неудачу, потому что они используют непубличные атрибуты. Любые предложения о том, как создать тему LightDialog?

Solutions Collecting From Web of "Android: цвет / стиль DialogPreference?"

Вы можете наследовать ненужные темы при создании стилей в Android.

Пожалуйста, прочитайте документацию по применению стилей и тем, в частности, раздел о наследовании

Вы должны иметь возможность использовать Theme.light и исправлять любые проблемы, которые у вас есть.

Вы можете обнаружить, что разные производители изменяют темы на своих устройствах, поэтому, если вы ориентируетесь на широкий спектр аппаратных средств, тогда вам может быть лучше создать полную тему, чтобы обеспечить совместимость вашего приложения на всех платформах.

ОБНОВИТЬ

Как указано в этом ответе Совместимый цвет пользовательского интерфейса на всех устройствах Android есть общедоступные и непубличные атрибуты. Ответ содержит ссылку на список публичных атрибутов, однако kernel.org все еще недоступен, поэтому вам нужно будет прорвать источник для core / res / res / values ​​/ public.xml

Вы можете указать стиль DialogPreference с помощью android:alertDialogTheme (поддерживаемый начиная с API 11 ) их свойство активности предпочтений:

 <style name="PreferencesActivityTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar"> <item name="android:alertDialogTheme">@style/Theme.MyDialog</item> </style> <style name="Theme.MyDialog" parent="@style/Theme.AppCompat.Light.Dialog"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> 

У меня есть решение, как вы можете сделать это программно (я думаю, что это проще):

 public class CustomDialogPreference extends DialogPreference { ... @Override protected void showDialog(Bundle state) { super.showDialog(state); //changing color of divider int divierId = getDialog().getContext().getResources() .getIdentifier("android:id/titleDivider", null, null); View divider = getDialog().findViewById(divierId); divider.setBackgroundColor(getContext().getResources().getColor(R.color.light_orange)); //changing color of title textview int titleId = getDialog().getContext().getResources() .getIdentifier("android:id/alertTitle", null, null); TextView title = (TextView) getDialog().findViewById(titleId); title.setTextColor(getContext().getResources().getColor(R.color.light_orange)); } ... }