Comment définir la couleur du texte de TextView dans le code?

544

En XML, nous pouvons définir une couleur de texte par l' textColorattribut, comme android:textColor="#FF0000". Mais comment puis-je le changer en codant?

J'ai essayé quelque chose comme:

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

holderest juste une classe et textest de type TextView. Le rouge est une valeur RVB (# FF0000) définie dans des chaînes.

Mais il montre 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 est-ce une valeur de référence de ressource ou autre chose?

Vikas
la source
Une note sur l'ajustement de l'interface utilisateur dans le code, veuillez considérer les avantages de voir l'interface utilisateur au moment de la conception, en minimisant les modifications d'exécution au minimum.
AlikElzin-kilaka

Réponses:

1245

Tu devrais utiliser:

holder.text.setTextColor(Color.RED);

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

  • Color.parseColor (Manuel) (comme les utilisations LEX)

    text.setTextColor(Color.parseColor("#FFFFFF"));
  • Color.rgbet Color.argb( Manual rgb ) ( Manual 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 un XMLfichier, vous pouvez le faire:

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

    parce que la getColor()fonction est obsolète 1 , vous devez l'utiliser comme ceci:

    ContextCompat.getColor(context, R.color.your_color);
  • Vous pouvez également insérer du HEX ordinaire, comme ceci:

    myTextView.setTextColor(0xAARRGGBB);

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

Consultez le manuel complet bien sûr, la classe publique Color étend Object .


1 Ce code était également présent ici:

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

Cette méthode est désormais déconseillée dans Android M. Vous pouvez cependant l'utiliser à partir de contextCompat dans la bibliothèque de support , comme le montre maintenant l'exemple.

Nanne
la source
2
De plus, si le texte est un lien, vous devez utiliser text.setLinkTextColor (...); dans le code ou Android: textColorLink = "..." en XML
WOUNDEDStevenJones
1
@Nanne Ce serait bien si votre réponse mentionnait également que R.color.XXX est une référence à la couleur. Cela signifie qu'il doit être déréférencé (comme c'est le cas dans votre exemple), pour plus de clarté.
nyaray
Je ne sais pas ce que tu veux dire? Comme dans, déréférencé et donc utilisera plus de ressources ou voulez-vous dire autre chose?
Nanne
Existe-t-il un moyen de savoir si une valeur de couleur particulière va laisser un texte disparaître?
Christopher Masser
6
getColor(int)est obsolète.
RestInPeace
137

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

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

Puis référencez-le 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));

Le premier est probablement préférable si vous compilez avec Android M, mais le thème que vous transmettez peut être nul, alors c'est peut-être plus facile pour vous?

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

textView.setTextColor(ContextCompat.getColor(context, R.color.errorColor));
xbakesx
la source
9
Pour setTextColor, pourquoi doit-il prendre la getResources (). GetColor () plutôt que la référence directe R.color.errorColor? Le R.color.x fonctionne pour presque toutes les autres méthodes. Incroyablement frustrant!
Civil
8
@Civilian: parce que le paramètre int que les méthodes setXXXColor () nécessitent est considéré comme la valeur ARGB réelle à utiliser, PAS la valeur à rechercher dans le fichier de ressources. Curieusement, la classe View a à la fois setBackgroundColor () et setBackgroundResource (), tandis que TextView manque une méthode setTextResource ().
Ian Kemp
1
getColor(int)est obsolète. ContextCompat.getColor(getContext(), R.color.yourColor);semble être le remplaçant.
RestInPeace
45

Et un autre:

TextView text = (TextView) findViewById(R.id.text);
text.setTextColor(Color.parseColor("#FFFFFF"));
LEX
la source
1
getResources()est une fonction membre Context. Pour les adaptateurs, utilisez getContext().getResources(). Les valeurs de couleur doivent aller dans les ressources, comme dans la réponse de @ xbakesx.
C0D3LIC1OU5
40

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

Créez un color.xmlfichier 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));
nouveau jour
la source
27

Vous pouvez utiliser

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

Vous pouvez également spécifier la couleur souhaitée avec Transparence.

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

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

Ganapathy C
la source
15

utilisez le code suivant dans layout.xml

<TextView  android:id="@+id/textView1"    
android:layout_width="wrap_content"    
android:layout_height="wrap_content" 
android:text="@string/add"
android:layout_marginTop="16dp"
android:textAppearance="?
android:attr/textAppearanceMedium"
android:textColor="#25383C"
android:textSize="13sp" />

<TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/add"
        android:layout_marginTop="16dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#25383C"
        android:textSize="13sp" />
Chinna
la source
15

Il existe de nombreuses façons de définir la couleur dans la vue texte.

  1. Ajoutez une valeur de couleur dans studio res-> values-> colors.xml as

    <color name="color_purple">#800080</color>

    Définissez maintenant la couleur dans la classe xml ou actvity comme

    text.setTextColor(getResources().getColor(R.color.color_purple)
  2. Si vous souhaitez donner un code couleur directement, utilisez ci-dessous le code Color.parseColor

    textView.setTextColor(Color.parseColor("#ffffff"));   
  3. Vous pouvez également utiliser RVB

    text.setTextColor(Color.rgb(200,0,0));
  4. L'utilisation peut également utiliser le code hexadécimal direct pour textView. Vous pouvez également insérer du HEX ordinaire, comme ceci:

    text.setTextColor(0xAARRGGBB);
  5. Vous pouvez également utiliser argb avec des valeurs alpha.

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

    a pour Alpha (Transparent) v.

  6. Et si vous utilisez la bibliothèque Compat, vous pouvez faire quelque chose comme ça

       text.setTextColor(ContextCompat.getColor(context, R.color.color_purple));
Rang
la source
9

Je fais normalement cela pour toutes les vues:

myTextView.setTextColor(0xAARRGGBB);

  • AA définit alpha (00 pour transparent, FF pour opaque)

  • RRGGBB définit le code couleur HTML normal (comme FF0000 pour le rouge).

AW
la source
Et pourquoi le vote négatif? Pouvez-vous ajouter quelques réflexions à ce sujet s'il vous plaît?
AW
7

Si vous prévoyez d'utiliser setTextAppearance, vous devez savoir qu'il remplacera la couleur du texte par le style hérité du thème. Donc, si vous souhaitez utiliser les deux, définissez la couleur par la suite .

Cela marche:

textView.setTextAppearance(context, android.R.style.TextAppearance_Medium);
textView.setTextColor(Color.RED);

Bien que cela fasse que votre couleur de texte soit par exemple blanche (pour le thème sombre) ou noire (pour le thème clair):

textView.setTextColor(Color.RED);
textView.setTextAppearance(context, android.R.style.TextAppearance_Medium);

Contrairement à cela en XML, l'ordre est arbitraire.

Robin Gawenda
la source
7
textView.setTextColor(ContextCompat.getColor(getApplicationC‌​ontext(),R.color.col‌​orWhite)); 

Dans le colors.xmlfichier, écrivez le code ci-dessous:

<color name="colorWhite">#FFFFFF</color>
Kaushik Chatterjee
la source
6

Je crois que si vous souhaitez spécifier une couleur en tant que ressource (dans le fichier XML ), vous devrez fournir sa valeur ARGB (pas simplement la valeur RVB).

Essayez de changer la valeur de votre couleur en #FFFF0000. Cela devrait vous donner ROUGE.

Arnab Chakraborty
la source
d'après mon expérience, ce n'est pas vrai et il est possible d'utiliser une valeur RVB au lieu d'une valeur ARGB
slinden77
6

text.setTextColor(getResource().getColor(R.color.black)) vous avez créé une couleur noire dans color.xml.

OU

text.setTextColor(Color.parseColor("#000000")) ici tapez le code hexadécimal souhaité

OU

text.setTextColor(Color.BLACK) vous pouvez utiliser des champs de couleurs statiques

Nitish
la source
5

Utilisation:

TextView tv = new TextView(this);
tv.setTextColor(Color.rgb(285,0,0));
Talha
la source
5
holder.text.setTextColor(Color.rgb(200,0,0));

ou

myTextView.setTextColor(0xAARRGGBB);
Yash Patil
la source
4

À l'aide de l'adaptateur, vous pouvez définir la couleur du texte en utilisant ce code:

holder.text_view = (TextView) convertView.findViewById(R.id.text_view);
holder.text_view.setTextColor(Color.parseColor("#FF00FF"));
Hiren Patel
la source
4
TextView text = new TextView(context);
text.setTextColor(Color.parseColor("any hex value of a color"));

Le code ci-dessus fonctionne de mon côté. Voici textun TextView sur lequel la couleur doit être définie.

Technologie Evon
la source
2

À partir de l'API 23, getResources().getColor()est obsolète.

Utilisez-le à la place:

textView.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.color_black));
PJ2104
la source
1
   textViewStatus.setTextColor(res.getColor(R.color.green));
zudo1337
la source
1

Dans l'adaptateur, vous pouvez définir la couleur du texte en utilisant ce code:

holder.my_text_view = (TextView) convertView.findViewById(R.id.my_text_view);
holder.my_text_view.setTextColor(Color.parseColor("#FFFFFF"));
Peter Mortensen
la source
1

si vous voulez donner directement un code couleur, utilisez

textView.setTextColor(Color.parseColor("#ffffff"));

ou si vous voulez donner un code de couleur à partir du dossier de couleurs, utilisez

textView.setTextColor(R.color.white);
reshma
la source
ce code textView.setTextColor (R.color.white); ne fonctionne pas. Vous pouvez utiliser text.setTextColor (getResources (). GetColor (R.color.color_purple) pour obtenir la couleur de votre color.xml
Gian Gomen
1

Pour définir la couleur d'un TextView, cela TextView.setTextColor(R.color.YOURCOLOR)ne suffit pas!

Il doit être utilisé comme ça -

TextView myText = (TextView) findViewById(R.id.YoutTextViewID);

myText.setTextColor(getResources().getColor(R.color.YOURCOLOR);

OU

myText.setTextColor(Color.parseColor("#54D66A"));
IntelliJ Amiya
la source
1
holder.userType.setTextColor(context.getResources().getColor(
                    R.color.green));
Harish Gyanani
la source
0

De même, j'utilisais color.xml:

<color name="white">#ffffff</color>
    <color name="black">#000000</color>   

Pour définir l' TextViewarrière - plan comme:

textView.setTextColor(R.color.white);

J'obtenais une couleur différente, mais lorsque j'ai utilisé le code ci-dessous, j'ai obtenu la couleur réelle.

textView.setTextColor(Color.parseColor("#ff6363"));
Raj Sharma
la source
0

J'ai fait de cette façon: Créez un fichier XML, appelé Couleurs dans le dossier res / values.

My Colours.xml:

    <?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="vermelho_debito">#cc0000</color>
    <color name="azul_credito">#4c4cff</color>
    <color name="preto_bloqueado">#000000</color>
    <color name="verde_claro_fundo_lista">#CFDBC5</color>
    <color name="branco">#ffffff</color>
    <color name="amarelo_corrige">#cccc00</color>
    <color name="verde_confirma">#66b266</color>
</resources>

Pour obtenir ces couleurs du fichier xml, j'ai utilisé ce code: valor c'est un TextView, et ctx c'est un objet Context. Je ne l'utilise pas à partir d'une activité, mais d'un BaseAdapter à un ListView. C'est pourquoi j'ai utilisé cet objet contextuel.

valor.setTextColor(ctx.getResources().getColor(R.color.azul_credito));

J'espère que cela aide.

Cristiano Guerra
la source
0

Pour fournir des valeurs RVB: text.setTextColor(Color.rgb(200,0,0));
Pour analyser la couleur à partir d'une valeur hexadécimale: text.setTextColor(Color.parseColor("#FFFFFF"));

Camarade
la source
0

Si vous êtes dans un adaptateur et souhaitez toujours utiliser une couleur définie dans les ressources, vous pouvez essayer l'approche suivante:

holder.text.setTextColor(holder.text.getContext().getResources().getColor(R.color.myRed));
Aleks Nine
la source
0
TextView textresult = (TextView)findViewById(R.id.textView1);
textresult.setTextColor(Color.GREEN);
CONvid19
la source
0

getColor () est obsolète

Essayez donc de cette façon:

 tv_title.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.sf_white));
kgandroid
la source
0

Je faisais cela pour un TextView dans un ViewHolder pour un RecyclerView. Je ne sais pas trop pourquoi, mais cela n'a pas fonctionné pour moi dans l'initialisation de ViewHolder.

public ViewHolder(View itemView) {
    super(itemView);
    textView = (TextView) itemView.findViewById(R.id.text_view);
    textView.setTextColor(context.getResources().getColor(R.color.myColor));
    // Other stuff
}

Mais quand je l'ai déplacé vers onBindViewHolder, cela a bien fonctionné.

public void onBindViewHolder(ViewHolder holder, int position){
    // Other stuff
    holder.textView.setTextColor(context.getResources().getColor(R.color.myColor));
}

J'espère que cela aide quelqu'un.

IsaiahJ
la source