2012-01-17 9 views
7

Estoy escribiendo una aplicación que necesita las dos cosas siguientes:¿Cómo puedo tener un tema global con diferentes colores de texto de TextView y Spinner?

  • El texto general (en TextView s) es necesario que haya un solo color (blanco, en este caso - fondo oscuro)
  • El texto en un Spinner necesario que haya un color diferente (negro, puesto que el blanco es demasiado difícil de leer)

utilicé un tema, aplicado a nivel de aplicación en el manifiesto, para llevar a cabo el primer punto anterior.

<resources> 
    <style name="GlobalTheme" parent="@android:style/Theme.Black.NoTitleBar.Fullscreen"> 
     <item name="android:textColor">#FFFFFF</item> 
    </style> 
</resources> 

Funcionó muy bien. Excepto que también hace que el texto en la ruleta sea blanco, lo cual es difícil de leer.

OK, así que quiero que el spinner color a seguir siendo negro, pero todo lo demás ser de color blanco.

Encontré this question que mostró cómo configurar el color de texto de Spinner, y funciona, pero solo cuando no estoy configurando el textColor global también.

Así que el siguiente no funciona:

<resources> 
    <style name="GlobalTheme" parent="@android:style/Theme.Black.NoTitleBar.Fullscreen"> 
     <item name="android:textColor">#FFFFFF</item> 
     <item name="android:spinnerItemStyle">@style/GlobalThemeSpinnerItem</item> 
    </style> 
    <style name="GlobalThemeSpinnerItem" parent="android:Widget.TextView.SpinnerItem"> 
     <item name="android:textAppearance">@style/GlobalThemeTextAppearanceSpinnerItem</item> 
    </style> 
    <style name="GlobalThemeTextAppearanceSpinnerItem" parent="android:TextAppearance.Widget.TextView.SpinnerItem"> 
     <item name="android:textColor">#000000</item> 
    </style> 
</resources> 

supongo que esperaba que esto sería como CSS y las cosas en cascada hacia abajo (es decir, "todo el texto será de color blanco, excepto lo que es en un spinner "). Si elimino la línea android:textColor en el tema principal, el truco de colores del rotador funciona bien.

Parece que la SpinnerItem deriva de TextView así que traté de llegar a una separación textViewStyle de tipo similar a la separación spinnerItemStyle, pero no tuvo suerte.

A diferencia de la mayoría de las personas que preguntan sobre esto, quiero mantenerlo en el XML tanto como sea posible. ¿Alguien sabe lo que estoy haciendo mal?

+0

¿Por qué no puedes usar parent = "android: Widget.TextView" para un color y parent = "android: Widget.TextView.SpinnerItem" para el otro? – Warpzit

Respuesta

1

Prueba esto:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android"> 

<style name="GlobalTheme" parent="@android:style/Theme.Black.NoTitleBar.Fullscreen"> 
    <item name="android:spinnerItemStyle">@style/GlobalThemeSpinnerItem</item> 
    <item name="android:textViewStyle">@style/GlobalThemeTextViewItem</item> 
</style> 

<style name="GlobalThemeTextViewItem" parent="android:Widget.TextView"> 
    <item name="android:textAppearance">@style/GlobalThemeTextAppearanceTextViewItem</item> 
</style> 
<style name="GlobalThemeTextAppearanceTextViewItem" parent="android:TextAppearance.Widget.TextView"> 
    <item name="android:textColor">#FFFFFF</item> 
</style> 

<style name="GlobalThemeSpinnerItem" parent="android:Widget.TextView.SpinnerItem"> 
    <item name="android:textAppearance">@style/GlobalThemeTextAppearanceSpinnerItem</item> 
</style> 
<style name="GlobalThemeTextAppearanceSpinnerItem" parent="android:TextAppearance.Widget.TextView.SpinnerItem"> 
    <item name="android:textColor">#000000</item> 
</style> 

Esto hará que el texto en sus TextViews blanco y el texto en su negro Spinners.

Cuestiones relacionadas