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.
[Questa risposta] (http://stackoverflow.com/a/6540378/15882) mostra come riportare il colore int nella sua stringa esadecimale. –