612 votes

Comment définir la couleur du texte d'un TextView en code ?

En XML, nous pouvons définir une couleur de texte par la fonction textColor comme android:textColor="#FF0000" . Mais comment le changer par codage ?

J'ai essayé quelque chose comme :

holder.text.setTextColor(R.color.Red);

holder est juste une classe et text est de type TextView . Le rouge est une valeur RVB (#FF0000) définie par des chaînes de caractères.

Mais il affiche une couleur différente plutôt que rouge. Quel type de paramètre pouvons-nous passer dans setTextColor() ? Dans la documentation, il est dit int mais s'agit-il d'une valeur de référence des ressources ou d'autre chose ?

0 votes

Une remarque à propos de l'ajustement de l'interface utilisateur dans le code, veuillez considérer les avantages de voir l'interface utilisateur au moment de la conception, ce qui minimise les changements au moment de l'exécution.

1369voto

Nanne Points 35880

Vous devriez utiliser :

holder.text.setTextColor(Color.RED);

Vous pouvez utiliser diverses fonctions de l Color pour obtenir le même effet bien sûr.

  • Color.parseColor (Manuel) (comme LEX utilise)

    text.setTextColor(Color.parseColor("#FFFFFF"));
  • Color.rgb y Color.argb ( Manuel rgb ) ( Manuel argb ) (comme Ganapathy utilise)

    holder.text.setTextColor(Color.rgb(200,0,0));
    holder.text.setTextColor(Color.argb(0,200,0,0));
  • Et bien sûr, si vous souhaitez définir votre couleur dans une XML vous pouvez le faire :

    <color name="errorColor">#f00</color>

    parce que le getColor() est dépréciée 1 vous devez l'utiliser comme suit :

    ContextCompat.getColor(context, R.color.your_color);
  • Vous pouvez également insérer des caractères HEX normaux, comme suit :

    myTextView.setTextColor(0xAARRGGBB);

    Où vous avez d'abord un canal alpha, puis la valeur de la couleur.

Consultez le manuel complet, bien sûr, public class Color extends Object .


1 Ce code se trouvait également ici :

textView.setTextColor(getResources().getColor(R.color.errorColor));

Cette méthode est désormais dépréciée dans Android M. Vous pouvez toutefois l'utiliser à partir de l'onglet contextCompat dans la bibliothèque de support comme le montre l'exemple ci-dessous.

2 votes

En outre, si le texte est un lien, vous devez utiliser text.setLinkTextColor(...) ; dans le code ou Android:textColorLink="..." dans le XML.

1 votes

@Nanne Il serait bien que votre réponse mentionne également que R.color.XXX est une référence à la couleur. Ce qui signifie qu'elle doit être déréférencée (comme dans votre exemple), pour plus de clarté.

0 votes

Je ne suis pas sûr de ce que vous voulez dire ? Comme dans, déréférencé et donc utilisera plus de ressources ou voulez-vous dire quelque chose d'autre ?

149voto

xbakesx Points 3419

Si vous voulez toujours spécifier vos couleurs dans votre fichier XML :

<color name="errorColor">#f00</color>

Puis faites-y référence dans votre code avec l'une de ces deux méthodes :

textView.setTextColor(getResources().getColor(R.color.errorColor, getResources().newTheme()));    

ou

textView.setTextColor(getResources().getColor(R.color.errorColor, null));

La première est probablement préférable si vous compilez contre Android M, mais le thème que vous passez peut être nul, donc peut-être que c'est plus facile pour vous ?

Et si vous utilisez la bibliothèque Compat, vous pouvez faire quelque chose comme ceci

textView.setTextColor(ContextCompat.getColor(context, R.color.errorColor));

10 votes

Pour setTextColor, pourquoi doit-il prendre la référence getResources().getColor() plutôt que la référence directe R.color.errorColor ? La référence R.color.x fonctionne pour presque toutes les autres méthodes. Incroyablement frustrant !

9 votes

@Civilian : parce que le paramètre int que les méthodes setXXXColor() requièrent est pris comme la valeur ARGB réelle à utiliser, PAS comme la valeur à rechercher dans le fichier de ressources. Bizarrement, la classe View possède à la fois setBackgroundColor() et setBackgroundResource(), alors que TextView n'a pas de méthode setTextResource().

3 votes

getColor(int) est déprécié. ContextCompat.getColor(getContext(), R.color.yourColor); semble être le remplacement.

55voto

LEX Points 356

Et un autre :

TextView text = (TextView) findViewById(R.id.text);
text.setTextColor(Color.parseColor("#FFFFFF"));

1 votes

getResources() est une fonction membre de Context. Pour les adaptateurs, utilisez getContext().getResources() . Les valeurs des couleurs doivent aller dans les ressources, comme dans la réponse de @xbakesx.

44voto

mankadanka Points 810

Vous ne pouvez le faire qu'à partir d'un fichier XML également.

Créer un color.xml dans le dossier des valeurs :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="textbody">#ffcc33</color>

</resources>

Ensuite, dans n'importe quel fichier XML, vous pouvez définir la couleur du texte en utilisant,

android:textColor="@color/textbody"

Ou vous pouvez utiliser cette couleur dans un fichier Java :

final TextView tvchange12 = (TextView) findViewById(R.id.textView2);
//Set color for textbody from color.xml file
tvchange1.setTextColor(getResources().getColor(R.color.textbody));

29voto

Ganapathy Points 2888

Vous pouvez utiliser

holder.text.setTextColor(Color.rgb(200,0,0));

Vous pouvez également spécifier la couleur que vous souhaitez avec Transparency.

holder.text.setTextColor(Color.argb(0,200,0,0));

a pour Alpha (Transparent) valeur r-rouge g-vert b-bleu

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X