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 la 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
//noinspection ResourceType
juste au-dessus de votre relevé.getResources().getString(0+R.color.someColor);
worksJuste pour le plaisir de la copypasta facile:
Ou si vous le voulez sans la transparence:
la source
'#' + Integer.toHexString(getResources().getColor(R.color.someColor);
car plus tard je l'utilisais dansColor.parseColor
Les réponses fournies ci-dessus ne sont pas mises à jour.
S'il vous plaît, essayez celui-la
la source
Toutes les solutions ici utilisent
Integer.toHexString()
break si vous aviez des zéros non significatifs dans votre chaîne hexadécimale. Des couleurs comme cela#0affff
donneraient#affff
. Utilisez plutôt ceci:ou avec alpha:
la source
Cause
getResources().getColor
need api> 23. Donc c'est mieux: juste pour faciliter le copier-coller:Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) );
Ou si vous le voulez sans la transparence: `
Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) & 0x00ffffff );
la source
ContextCompat.getColor
ne prend pas 3 argumentsPour les API supérieures à 21, vous pouvez utiliser
Cela renverra la couleur dans un format de chaîne. Pour convertir cela en une couleur au format entier (parfois seuls les entiers sont acceptés), alors:
L'expression ci-dessus renvoie l'équivalent entier de la couleur définie dans le fichier color.xml
la source
Ajoutez @SuppressLint ("ResourceType") si une erreur se produit. Comme ci-dessous.
la source
Je ne pense pas qu'il existe une fonctionnalité standard pour cela. Vous pouvez cependant transformer la valeur de retour de
getColor()
à hexadécimal et transformer la valeur hexadécimale en chaîne.hex 123456 = int 1193046;
la source
Voici comment je l'ai fait:
la source
Ça marche pour moi!
la source
Si vous ne souhaitez pas utiliser
ContextCompat
ouSuppressLint
, ajoutez simplement unestring
ressource juste sous votrecolor
.Au lieu de
Utilisation
Votre code devient plus répétitif, mais il est beaucoup plus propre. De plus, il est presque impossible d' oublier de mettre à jour
string
après le changementcolor
car ils sont juste à côté de l'autre.la source