101 votes

Changer la couleur du texte d'un mot dans un TextView

Je cherche un moyen de changer la couleur d'un texte d'un seul mot dans une TextView à partir d'un Activity .

Par exemple, avec ceci :

String first = "This word is ";
String next = "red"
TextView t = (TextView) findViewById(R.id.textbox);
t.setText(first + next);

Comment puis-je changer la couleur de la next le texte en rouge ?

1 votes

0 votes

0 votes

180voto

Dan Points 1144

Le moyen le plus simple que je connaisse est d'utiliser le html.

String first = "This word is ";
String next = "<font color='#EE0000'>red</font>";
t.setText(Html.fromHtml(first + next));

Mais cela vous obligera à reconstruire le TextView quand (si ?) vous voulez changer la couleur, ce qui pourrait vous causer des tracas.

1 votes

C'est certainement la méthode la plus simple, mais la couleur ne devrait-elle pas être color='#EE0000' ? Le symbole dièse est nécessaire pour indiquer une couleur hexadécimale.

0 votes

Corrigé, merci ! Je ne me souviens pas si j'ai copié ceci à partir d'un code réel ou de mémoire avec un site web de générateur de couleurs, donc ça pourrait ne pas avoir fonctionné avant.

0 votes

Ok, juste pour être sûr ! De plus, comme je l'ai découvert, vous ne pouvez pas utiliser de codes hexadécimaux à 8 chiffres, donc pas de composant alpha. Cette question m'a laissé perplexe pendant un moment.

78voto

codeScriber Points 1800
t.setText(first + next, BufferType.SPANNABLE);
Spannable s = (Spannable)t.getText();
int start = first.length();
int end = start + next.length();
s.setSpan(new ForegroundColorSpan(0xFFFF0000), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

vous devez utiliser spannable qui vous permettra également d'augmenter la taille du texte, de le mettre en gras etc.... même d'ajouter une image.

4 votes

Bonne réponse, merci. Dans ce cas, on peut utiliser "s.length()" au lieu de "start + next.length()" : int end = s.length() ;

2 votes

Si quelqu'un cherche une solution Xamarin.Android. Vous pouvez assigner SpannableString en utilisant TextFormatted Propriété de votre contrôle.

0 votes

Impossible de le faire fonctionner. J'ai fini par opter pour la solution de B K.

43voto

DroidArc Points 1252

Utilisez SpannableStringBuilder comme ceci :

SpannableStringBuilder builder = new SpannableStringBuilder();

SpannableString str1= new SpannableString("Text1");
str1.setSpan(new ForegroundColorSpan(Color.RED), 0, str1.length(), 0);
builder.append(str1);

SpannableString str2= new SpannableString(appMode.toString());
str2.setSpan(new ForegroundColorSpan(Color.GREEN), 0, str2.length(), 0);
builder.append(str2);

TextView tv = (TextView) view.findViewById(android.R.id.text1);
tv.setText( builder, TextView.BufferType.SPANNABLE);

0 votes

Y a-t-il quelque chose que je puisse remplacer new ForegroundColorSpan(Color) avec pour que le texte conserve sa couleur d'origine par défaut ?

0 votes

Comment ajouter du texte brut (String) au milieu d'une fenêtre de texte ?

6voto

Maysam R Points 387

pour les longues chaînes, vous pouvez utiliser ceci :

String help = getString(R.string.help);
help = help.replace("some word", "<font color='#EE0000'>some word</font>");
txtDesc.setText(Html.fromHtml(help));

5voto

Nikola Despotoski Points 13670

Ou vous pouvez utiliser Spannable classe.

http://developer.Android.com/reference/Android/text/Spannable.html

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