Intereting Posts
Хороший способ получить местоположение пользователя в Android Как программно установить drawableRight на Android Edittext? Не удается создать новый проект Android с помощью Eclipse Android 5.0 Lollipop и 4.4 KitKat игнорирует мою сеть WiFi, enableNetwork () бесполезна Лотские свойства и значения Kotlin сброшены: сбрасываемый ленивый делегат Извлечение данных из pdf417, таких как Drivers License Как начатьForeground () без уведомления? Не удалось расширить RemoteViews: MediaSessionCompat и NotificationCompat.MediaStyle на устройствах HUAWEI EOFException при дооснащении при выполнении синхронных запросов PUT Android – Каков правильный способ сохранения / восстановления адаптера ListView? Как я могу использовать layout_weight в представлении элементов RecyclerView или ListView, чтобы элементы с равной высотой заполняли доступное пространство на экране? Как включить функцию AutoStart для моего приложения в приложении безопасности Xiaomi Security App программно в android Как заставить Share Intent открыть конкретное приложение? Webviewglue nativedestroy view Как изменить идентификатор группы файла на корневом устройстве Android?

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)); } ... }