Je souhaite utiliser des couleurs d'un thème pour l'appliquer à du code HTML que mon application est en train de rendre. Je me demande si je peux le faire?Comment extraire les valeurs de couleur (#rgb) d'un thème Android?
Je cherche à utiliser des couleurs comme ils sont spécifiées dans themes.xml:
<item name="colorBackground">@android:color/background_dark</item>
<item name="textColorPrimary">@android:color/primary_text_dark</item>
recherche donc à eux, ils sont déclarés de la même manière. J'ai donc pensé que je pouvais y accéder de la même manière.
Ce n'est pas la cause cependant. Lorsque vous essayez d'accéder à ces valeurs de cette façon:
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);
Je reçois cela comme un résultat:
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
Les résultats sont différents. Le premier me donne en fait la couleur "#fffffff" qui fonctionnerait pour moi, le second me donne seulement un xml. Dois-je passer quelques cerceaux supplémentaires ici pour résoudre la couleur actuelle?
Mon intention originale fonctionne-t-elle? Peut-être que ça ne marchera pas, parce que les couleurs pourraient être arbitraires drawables?
Je n'ai trouvé aucune documentation pertinente sur , mais si vous en connaissez, veuillez me le signaler.
Btw. J'ai également essayé obtenirStyledAttributes(), mais cela avait essentiellement les mêmes problèmes.
[Cette réponse] (http://stackoverflow.com/a/6540378/15882) montre comment retourner la couleur int dans sa chaîne hexadécimale. –