2010-05-13 9 views
10

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.

+0

[Cette réponse] (http://stackoverflow.com/a/6540378/15882) montre comment retourner la couleur int dans sa chaîne hexadécimale. –

Répondre

6

Je pense que vous devriez renommer colorResourceId en myColor ou quelque chose comme ça, parce que c'est ce que c'est censé être dans votre code, pour autant que je sache.

-16777216 est équivalent à 0xFF000000, qui est de couleur noire, donc probablement votre thème était un texte noir sur fond blanc.

Questions connexes