2010-06-28 17 views
7

Sto cambiando il tema di un'attività in onCreate usando setTheme (lo sto facendo anche prima di chiamare super.onCreate(), perché dovrebbe essere più affidabile).Come posso modificare textColorPrimary in un tema?

Funziona nel senso che cambia i colori di sfondo e in primo piano. Tuttavia, il mio layout ha alcuni elementi che utilizzano stili come textAppearanceLarge. Ora il testo di AndroidAppearanceLarge utilizza internamente il testoPrimaryColor - che è ancora immutato dal mio tema.

Ho tentato di ignorare il colore del testo principale nel mio tema, ma non sembra funzionare.

Qui è la parte cruciale del tema:

<style name="Theme.MyApp.White"> 
    <item name="android:background">@android:color/white</item> 
    <item name="android:textColor">#000000</item> 
</style> 

Lo sfondo appare bianco, TextViews semplici appaiono nere ... ma TextViews utilizzando textAppearanceLarge sono bianchi, e come tale invisibile (bianco su bianco).

Ho provato cose come questa:

<item name="android:ColorPrimary">#000000</item> 
    <item name="android:textColorPrimary">#000000</item> 
    <item name="android:attr/textColorPrimary">#000000</item> 

Ma nessuno di coloro che fanno qualsiasi cosa. Qual è il trucco magico?

risposta

1

venuto fuori che abbaiava contro l'albero sbagliato. Sovrascrivere i colori e tutto ha funzionato bene. Tuttavia, definendo android:background nel mio tema, tutto era completamente incasinato, e tutto il testo appariva bianco, nonostante io abbia ignorato tutti i colori (incluso textColorPrimary). Omettere il numero android:background ha fatto il trucco.

+0

ah. felice che abbia funzionato per te! ;) – zsniperx

+0

Apprezzo ancora la tua risposta (anche se stavi parlando più di stili, stavo pensando ai temi). Sto lentamente iniziando a prenderlo, anche se è ancora un po 'traballante. – EboMike

6

Proprio come una soluzione alternativa, invece di usare textAppearanceLarge nel layout, (se si sta utilizzando XML per costruire il layout), definire il proprio stile nel textAppearanceLarge styles.xml che emula l'androide quello di default tranne che si può cambiare il colore al bianco.

di layout xml:

<!-- example textview --> 
<TextView style="@style/large" android:text="text goes here"></TextView> 

poi nel styles.xml

<style name="large"> 
    <item name="android:textColor">@android:color/white</item> 
    <!-- other necessary items here like font etc.--> 
</style> 
+0

Grazie snipe! Per elaborare: sto cercando di aggiungere temi alla mia app che puoi cambiare tra di loro, quindi in pratica ho uno stile per tema che dovrebbe definire l'intero look - se l'utente sceglie il tema "bianco", tutto sarà nero su bianco, ecc. Non so come lo sistemerei se avessi uno stile separato per "grande". – EboMike

+0

La tua risposta funziona, ma non è il modo corretto per creare temi Android, Sto cercando anche la soluzione, ma il modo più avanzato è quello di modificare gli attributi incorporati dei colori Android per una facile personalizzazione del colore. – jjalonso

Problemi correlati