2012-01-17 7 views
7

Sto scrivendo un app che ha bisogno dei seguenti due cose:Come posso avere un tema globale con colori di testo TextView e Spinner diversi?

  • Il testo generale (in TextView s) deve essere un colore (bianco, in questo caso - sfondo scuro)
  • Il testo su un Spinner ha bisogno di essere un colore diverso (nero, dal bianco è troppo difficile da leggere)

ho usato un tema, applicato a livello di applicazione nel manifesto, per eseguire il primo elemento di cui sopra.

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

Ha funzionato benissimo. Tranne che rende il testo sullo spinner bianco, che è difficile da leggere.

OK, quindi voglio il filatore colore di essere ancora in bianco, ma tutto il resto essere bianco.

Ho trovato this question che ha mostrato come impostare il colore del testo Spinner e funziona, ma solo quando non ho impostato anche il testo globale.

Così il seguente non funziona:

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

Credo Speravo che questo sarebbe come CSS e le cose sarebbe cascata verso il basso (vale a dire, "tutto il testo deve essere bianco, tranne ciò che è in uno spinner "). Se rimuovo la riga android:textColor nel tema principale, il trucco del colore della filatura funziona correttamente.

Sembra la SpinnerItem deriva dal TextView così ho cercato di venire con una separazione textViewStyle tipo simile alla separazione spinnerItemStyle, ma non ha avuto fortuna.

A differenza della maggior parte delle persone che lo chiedono, voglio mantenerlo nell'XML il più possibile. Qualcuno sa cosa sto sbagliando?

+0

Perché non puoi utilizzare parent = "android: Widget.TextView" per un colore e parent = "android: Widget.TextView.SpinnerItem" per l'altro? – Warpzit

risposta

1

Prova questo:

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

Questo renderà il testo nelle vostre TextViews bianchi e il testo nel Spinners nero.

Problemi correlati