2010-05-13 12 views
10

Desidero utilizzare i colori di un tema per applicarlo a un codice HTML che la mia app sta eseguendo il rendering. Mi chiedo se posso farlo?Come estrarre i valori di colore (#rgb) da un tema Android?

Sto cercando di usare i colori come siano specificati nel themes.xml:

<item name="colorBackground">@android:color/background_dark</item> 
    <item name="textColorPrimary">@android:color/primary_text_dark</item> 

Così guardando loro che vengono dichiarati nello stesso modo. Quindi pensavo di poterci accedere allo stesso modo.

Questa non è la causa però. Quando si cerca di accedere a tali valori in questo modo:

TypedValue tv = new TypedValue(); 
    getTheme().resolveAttribute(android.R.attr.colorBackground, tv, true); 

    System.out.println("tv.string=" + tv.string); 
    System.out.println("tv.coerced=" + tv.coerceToString()); 

    int colorResourceId = getResources().getColor(tv.resourceId); 
    System.out.println("colorResourceId=" + colorResourceId); 

    tv = new TypedValue(); 
    getTheme().resolveAttribute(android.R.attr.textColorPrimary, tv, true); 

    System.out.println("tv.string=" + tv.string); 
    System.out.println("tv.coerced=" + tv.coerceToString()); 

    colorResourceId = getResources().getColor(tv.resourceId); 
    System.out.println("colorResourceId=" + colorResourceId); 

ottengo questo come un risultato:

I/System.out(1578): tv.string=null 
I/System.out(1578): tv.coerced=#ffffffff 
I/System.out(1578): colorResourceId=-1 

I/System.out(1578): tv.string=res/color/primary_text_light.xml 
I/System.out(1578): tv.coerced=res/color/primary_text_light.xml 
I/System.out(1578): colorResourceId=-16777216 

I risultati sono diversi. Il primo mi dà effettivamente il colore "#fffffff" che funzionerebbe per me, il secondo mi dà solo un xml.

Devo passare attraverso alcuni altri cerchi qui per risolvere il colore reale? La mia intenzione originale funziona a tutti? Forse non funzionerà, perché i colori potrebbero essere dei drawable arbitrari?

Non ho trovato alcuna documentazione pertinente, ma se ne conosci qualcuno, indicami solo lì per favore.

Btw. Ho anche provato a ottenereStyledAttributes(), ma questo aveva sostanzialmente gli stessi problemi.

+0

[Questa risposta] (http://stackoverflow.com/a/6540378/15882) mostra come riportare il colore int nella sua stringa esadecimale. –

risposta

6

Penso che dovresti rinominare colorResourceId in myColor o qualcosa del genere, perché è quello che dovrebbe essere nel tuo codice, per quanto ne so.

-16777216 è equivalente a 0xFF000000, che è di colore nero, quindi probabilmente il tema era testo nero su sfondo bianco.

Problemi correlati