Android: DialogPreference color / estilo?

Mi actividad de preferencia principal se establece en "@android:style/Theme.Light" . Una de mis preferencias es DialogPreference, cuyo Diálogo contiene un ListView. El cuadro de diálogo de ListView es de color gris oscuro (porque DialogPreference utiliza AlertBuilder que crea cuadros de diálogo gris oscuro) y el texto de la lista es negro (porque Theme.Light hace que listViews tenga texto en negro). ¿Hay una manera fácil de conseguir el ListView para comportarse con el mismo estilo que el diálogo oscuro? ¿O para conseguir que el diálogo oscuro se comporte con el mismo estilo que la actividad ligera?

EDITAR:

Basándome en los comentarios de Merlin, parece que lo que debería tratar de hacer es crear un tema LightDialog. Para hacer esto he intentado: 1. extender Theme.Light android y añadir las propiedades dialogy de 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> 

… y 2. extendiendo Theme.Dialog android y añadiendo las propiedades lighty de 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> 

Ambos intentos fallaron porque utilizan atributos no públicos. ¿Alguna sugerencia sobre cómo crear un tema LightDialog?

Puede heredar temas de defecto al crear estilos en Android.

Por favor lea la documentación sobre Aplicación de Estilos y Temas específicamente en la sección sobre herencia

Deberías poder tomar Theme.light y corregir cualquier problema que tengas con él.

Usted puede encontrar que los diferentes vendedores alteran los temas en sus dispositivos por lo que si está apuntando a una amplia gama de hardware, entonces puede ser mejor la creación de un tema completo para garantizar que su aplicación es coherente en todas las plataformas.

ACTUALIZAR

Como se indica en esta respuesta consistente color de la interfaz de usuario en todos los dispositivos Android hay atributos públicos y no públicos. La respuesta proporciona un enlace a una lista de atributos públicos sin embargo kernel.org todavía está abajo por lo que tendrá que cavar a través de la fuente de núcleo / res / res / values ​​/ public.xml

Puede especificar el estilo del diálogo de DialogPreference usando android:alertDialogTheme (soportado a partir de API 11 ) ellos propiedad de las preferencias actividad:

 <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> 

Tengo una solución de cómo se puede hacer mediante programación (creo que es la manera más fácil):

 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)); } ... } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.