web-dev-qa-db-fra.com

Android obtient la couleur comme valeur de chaîne

Si j'ai défini une couleur dans les ressources

<resources>
    <color name="someColor">#123456</color>
</resources>

il est possible de définir la couleur par son identifiant, comme

view.setTextColor(R.color.someColor);

Est-il également possible d'obtenir la valeur de chaîne de couleur à partir de colors.xml?

Quelque chose comme 

colorStr = getColor(R.color.someColor);
// -> colorStr = "#123456"

Si oui, quelqu'un peut-il donner un exemple?

Je vous remercie

74
Tima

C'est ta réponse

colorStr=getResources().getString(R.color.someColor);

tu auras 

 colorStr = "#123456"
119
Tanmay Mandal

Juste pour des raisons de copypasta facile:

"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color));

Ou si vous le voulez sans la transparence:

"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color) & 0x00ffffff);
115
kodi

Les réponses fournies ci-dessus ne sont pas mises à jour.

S'il vous plaît, essayez celui-la

String colorHex = "#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.dark_sky_blue) & 0x00ffffff);
23
Solidak

Toutes les solutions ici utilisent Integer.toHexString() break si vous aviez des zéros en tête dans votre chaîne hexagonale. Des couleurs comme #0affff donneraient #affff. Utilisez ceci à la place:

String.format("#%06x", ContextCompat.getColor(this, R.color.your_color) & 0xffffff)

ou avec alpha:

String.format("#%08x", ContextCompat.getColor(this, R.color.your_color) & 0xffffffff)
8
Florian M

Pour les API supérieures à 21, vous pouvez utiliser 

getString(R.color.color_name);

Cela renverra la couleur au format chaîne . Pour la convertir en couleur au format entier (parfois seuls les entiers sont acceptés), alors:

Color.parseColor(getString(R.color.color_name));

L'expression ci-dessus renvoie l'équivalent entier de la couleur définie dans le fichier color.xml.

4
Samarth S

Je ne pense pas qu'il existe une fonctionnalité standard pour cela. Vous pouvez toutefois transformer la valeur renvoyée de getColor() en hex et transformer la valeur hexadécimale en chaîne.

hex 123456 = int 1193046;

1
Nick

Voici comment je l'ai fait:

String color = "#" + Integer.toHexString(ContextCompat.getColor
(getApplicationContext(), R.color.yourColor) & 0x00ffffff);
1
giainel

Ajoutez @SuppressLint ("ResourceType") si une erreur se produit. Comme ci-dessous.

private String formatUsernameAction(UserInfo userInfo, String action) {
        String username = userInfo.getUsername();
        @SuppressLint("ResourceType") String usernameColor = getContext().getResources().getString(R.color.background_button);
        return "<font color=\""+usernameColor+"\">" + username
                + "</font> <font color=\"#787f83\">" + action.toLowerCase() + "</font>";
    }
0
Tuan Nguyen