Theming DialogPreferences

Estoy utilizando un tema para personalizar la apariencia de un diálogo de configuración. Las preferencias se definen en XML e inflado por un PreferenceFragment . La forma de unir el fragmento es básicamente como se describe en la guía del desarrollador .

Funciona totalmente bien personalizando la primera pantalla a través de un tema personalizado aplicado a la actividad de alojamiento:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme(R.style.Theme_Preferences_Dialog); ... 

Con el estilo:

 <style name="Theme.Preferences.Dialog" parent="@android:style/Theme.Holo.Light.Dialog"> <item name="android:colorBackground">#fff0f0f0</item> <item name="android:background">#fff0f0f0</item> <item name="android:divider">#ffe0e0e0</item> <item name="android:textColorPrimary">#ff555555</item> <item name="android:textColorSecondary">#ff808080</item> <item name="android:textAppearanceLarge">@style/preferences_large_text</item> <item name="android:textAppearanceMedium">@style/preferences_medium_text</item> </style> 

Y algunas preferencias definidas como:

 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="@string/pref_title" > ... <ListPreference android:enabled="false" android:key="@string/pref_change_workspace_key" android:persistent="true" android:summary="@string/pref_change_workspace_summary_singel" android:title="@string/pref_change_workspace_title" /> ... </PreferenceScreen> 

El problema es que todas las preferencias que están abriendo un diálogo (como una ListPreference ), tienen un estilo diferente al resto del diálogo.

El primer nivel del fragmento de configuración parece correcto:

Configuración de primer nivel

Pero hacer clic en uno de los elementos produce un resultado incorrecto:

Configuración segundo nivel

y el atributo windowbackground a transparente

 <item name="android:windowBackground">@android:color/transparent</item> 

values ​​=> styles.xml

 <resources> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:dialogTheme">@style/MyDialogStyle</item> <item name="android:alertDialogTheme">@style/MyDialogStyle</item> </style> <style name="MyDialogStyle" parent="Theme.AppCompat.Light.Dialog"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:windowBackground">@android:color/transparent</item> </style> </resources> 

values-v21 => styles.xml

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:dialogTheme">@style/MyDialogStyle</item> <item name="android:alertDialogTheme">@style/MyDialogStyle</item> </style> <style name="MyDialogStyle" parent="Theme.AppCompat.Light.Dialog"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:background">#fff0f0f0</item> <item name="android:windowBackground">@android:color/transparent</item> </style> 

El problema visto arriba resulta de la línea

 <item name="android:background">#fff0f0f0</item> 

en el estilo definido. Al parecer, esta configuración también se utiliza para el diálogo generado. Al eliminar esta línea se obtiene el resultado esperado.

Debe intentar anular la propiedad de estilo android:alertDialogTheme (admitida a partir de la API 11 ) a los diálogos de preferencias de estilo (y no sólo preferencias sino también cuadros de diálogo de alerta en general):

 <style name="AppTheme" 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> 
  • Quitar el rectángulo de color de fondo adicional del menú de desbordamiento entre / salir de las animaciones?
  • Múltiples estilos de botones en un tema
  • Color del tema contextual / anular
  • Android 5.0: cómo cambiar Visión general Tarea Título color de fondo
  • Problema de dibujo con el tema
  • Android HoloEverywhere: mChildFragmentManager no se puede resolver con una variable
  • Mostrar la barra de título del código
  • Definir el estilo TabLayout en el tema
  • Configuración de la barra de navegación como transparente y atenuada al mismo tiempo
  • Las preferencias dependientes muestran una fuente de color incorrecta cuando está deshabilitada
  • Cambiar el color de Switch en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.