2011-04-15 23 views
12

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

EDIT:

Basándose en los comentarios de Merlin, parece que lo que debería tratar de hacer es crear un tema LightDialog. Con el fin de hacer esto he intentado: 1. extender Theme.Light de androide y la adición de las propiedades de dialogía 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. extendiéndose Theme.Dialog del androide y la adición de las propiedades Lighty de Tema. Ligero.

<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 fallidos debido a que utilizan atributos no públicos. ¿Alguna sugerencia sobre cómo crear un tema LightDialog?

Respuesta

4

Puede heredar los temas de desactivación al crear estilos en Android.

Por favor lea la documentación sobre Applying Styles and Themes específicamente la sección sobre la herencia

Usted debe ser capaz de tomar Theme.light y corregir cualquier problema que tenga con él.

Es posible que diferentes proveedores modifiquen los temas en sus dispositivos, por lo que si se dirige a una amplia gama de hardware, será mejor que cree un tema completo para garantizar que su aplicación sea coherente en todas las plataformas.

ACTUALIZACIÓN

Como se indica en esta respuesta Consistent UI color in all Android devices hay atributos públicos y no públicos. La respuesta proporciona un enlace a una lista de atributos públicos; sin embargo, kernel.org aún está inactivo, por lo que deberá buscar en el origen para core/res/res/values/public.xml

+0

me trataron de crear un tema basado en su sugerencia , pero no tuvo éxito. Por favor mira mi edición. – ab11

+0

Esta es una pregunta separada y debe publicarse como tal en lugar de cambiar el contexto del original. – Merlin

+0

, lo publicaré por separado y marque este como respondido. – ab11

0

Tengo una solución para hacerlo de forma programática (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)); 
} 

... 

} 
+0

Este código provoca una NotFoundException –

1

puede especificar el estilo de diálogo DialogPreference 's utilizando android:alertDialogTheme (soportado a partir API 11) a la propiedad de la actividad preferencias:

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