N'oubliez pas d'échapper à userinput en utilisant Html.escapeHtml(str).
kelunik
1
Ajouté au niveau api 1
2red13
3
Juste un avertissement. J'avais un problème lorsque j'avais besoin que mon texte soit en majuscules. J'utilisais android: textAllCaps = "true" en XML et, en même temps, j'avais mon contenu HTML en majuscules. Ça ne marchait pas. J'ai supprimé l'attribut XML et cela fonctionne maintenant très bien. Soyez prudent, car si vous utilisez setAllCaps () dans le code, le même problème apparaîtra.
super, merci, peut également faire BackgroundColorSpan. il y a une petite faute de frappe dans votre exemple, WordToSpan et WordtoSpan, notez le cas sur To
Ne fonctionne pas pour moi obtenir `java.lang.StringIndexOutOfBoundsException: length = 3; index = 12`
Muhammad Babar
1
StringIndexOutOfBoundsException elle-même explicative. Vous accédez à la chaîne au-delà de sa longueur.
Swapnil Kotwal
1
Mes chaînes n'étaient pas fixes, donc les chaînes seraient générées au moment de l'exécution de l'application. J'ai essayé presque toutes les réponses à cette question. Mais seule cette solution a fonctionné pour moi.
Md. Sabbir Ahmed
33
Vous pouvez utiliser Spannablepour appliquer des effets à votre TextView:
Voici mon exemple pour colorer uniquement la première partie d'un TextViewtexte (tout en vous permettant de définir la couleur de manière dynamique plutôt que de la coder en dur dans une chaîne comme dans l'exemple HTML!)
mTextView.setText("Red text is here",BufferType.SPANNABLE);Spannable span =(Spannable) mTextView.getText();
span.setSpan(newForegroundColorSpan(0xFFFF0000),0,"Red".length(),Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
Dans cet exemple, vous pouvez remplacer 0xFFFF0000 par un getResources().getColor(R.color.red)
TextView textView=(TextView)findViewById(R.id.yourTextView);//init//here I am appending two string into my textView with two diff colors.//I have done from fragment so I used here getActivity(), //If you are trying it from Activity then pass className.this or this;
textView.append(TextViewUtils.getColoredString(getString(R.string.preString),ContextCompat.getColor(getActivity(),R.color.firstColor)));
textView.append(TextViewUtils.getColoredString(getString(R.string.postString),ContextCompat.getColor(getActivity(),R.color.secondColor)));
À l'intérieur de votre classe TextViewUtils, ajoutez cette méthode
/***
*
* @param mString this will setup to your textView
* @param colorId text will fill with this color.
* @return string with color, it will append to textView.
*/publicstaticSpannable getColoredString(String mString,int colorId){Spannable spannable =newSpannableString(mString);
spannable.setSpan(newForegroundColorSpan(colorId),0, spannable.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);Log.d(TAG,spannable.toString());return spannable;}
Je viens de mettre à jour, vérifiez-le une fois, cela fonctionne pour moi.
Abdul Rizwan le
Myabe vous utilisez Html.fromHtml pour utiliser cette chaîne?
Sergey Shustikov le
dans le fichier string.xml J'ai créé une variable et défini ceci, cela fonctionne pour moi en ce moment je le fais, pouvez-vous s'il vous plaît donner votre chaîne ici.
Abdul Rizwan le
5
Il est préférable d'utiliser la chaîne dans le fichier de chaînes, en tant que telle:
<stringname="some_text">
<![CDATA[
normal color <fontcolor=\'#06a7eb\'>special color</font>]]>
</string>
J'ai écrit un code pour une autre question similaire à celle-ci, mais cette question a été dupliquée, je ne peux donc pas y répondre, je mets simplement mon code ici si quelqu'un cherche la même exigence.
Ce code ne fonctionne pas entièrement, vous devez apporter des modifications mineures pour le faire fonctionner.
Voici le code:
J'ai utilisé l'idée @Graeme d'utiliser du texte spannable.
String colorfulText ="colorfulText";Spannable span =newSpannableString(colorfulText);for(int i =0, len = colorfulText.length(); i < len; i++){
span.setSpan(newForegroundColorSpan(getRandomColor()), i, i+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}((TextView)findViewById(R.id.txtSplashscreenCopywrite)).setText(span);
Utilisez la classe SpannableBuilder au lieu du formatage HTML lorsque cela est possible, car il est plus rapide que l'analyse du format HTML. Voir mon propre benchmark "SpannableBuilder vs HTML" sur Github
Merci!
Des réponses géniales! J'ai pu utiliser Spannable pour créer du texte de couleur arc-en-ciel (afin que cela puisse être répété pour n'importe quel tableau de couleurs). Voici ma méthode, si cela aide quelqu'un:
privateSpannable buildRainbowText(String pack_name){int[] colors =newint[]{Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE,Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE,Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE,Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE};Spannable word =newSpannableString(pack_name);for(int i =0; i < word.length(); i++){
word.setSpan(newForegroundColorSpan(colors[i]), i, i+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}return word;}
Et puis je viens de setText (buildRainboxText (pack_name)); Notez que tous les mots que je passe ont moins de 15 caractères et que cela ne fait que répéter 5 couleurs 3 fois - vous voudrez ajuster les couleurs / la longueur du tableau en fonction de votre utilisation!
Depuis l'API 24, vous avez FROM_HTML_OPTION_USE_CSS_COLORS afin que vous puissiez définir les couleurs en CSS au lieu de le répéter tout le temps avec font color="
beaucoup plus clair - lorsque vous avez du html et que vous souhaitez mettre en évidence des balises prédéfinies - il vous suffit d'ajouter un fragment CSS en haut de votre html
Réponses:
oui, si vous formatez la propriété
String
withhtml
,font-color
transmettez-la à la méthodeHtml.fromHtml(your text here)
la source
Html.escapeHtml(str)
.Html.fromHtml(String)
est désormais obsolète, utilisez plutôtHtml.fromHtml(String, Html.FROM_HTML_MODE_LEGACY)
. Plus d'informations peuvent être trouvées ici.Vous pouvez imprimer des lignes avec plusieurs couleurs sans HTML comme:
la source
Vous pouvez utiliser
Spannable
pour appliquer des effets à votreTextView
:Voici mon exemple pour colorer uniquement la première partie d'un
TextView
texte (tout en vous permettant de définir la couleur de manière dynamique plutôt que de la coder en dur dans une chaîne comme dans l'exemple HTML!)Dans cet exemple, vous pouvez remplacer 0xFFFF0000 par un
getResources().getColor(R.color.red)
la source
J'ai fait de cette façon:
Définissez la couleur sur le texte en passant la chaîne et la couleur :
Définissez le texte sur TextView / Button / EditText, etc. en appelant le code ci-dessous:
Affichage:
Obtenez une chaîne colorée:
Définissez le texte sur TextView de deux chaînes avec des couleurs différentes:
Terminé
la source
Html.fromHtml("...")
par des appels versHtml.fromHtml("...", FROM_HTML_MODE_LEGACY)
Utilisez SpannableStringBuilder
la source
Hé les gars, j'ai fait ça, essayez-le
À l'intérieur de votre classe TextViewUtils, ajoutez cette méthode
la source
Il est préférable d'utiliser la chaîne dans le fichier de chaînes, en tant que telle:
Usage:
la source
J'ai écrit un code pour une autre question similaire à celle-ci, mais cette question a été dupliquée, je ne peux donc pas y répondre, je mets simplement mon code ici si quelqu'un cherche la même exigence.
Ce code ne fonctionne pas entièrement, vous devez apporter des modifications mineures pour le faire fonctionner.
Voici le code:
J'ai utilisé l'idée @Graeme d'utiliser du texte spannable.
Méthode de couleur aléatoire:
la source
Essaye ça:
la source
Utilisez la classe SpannableBuilder au lieu du formatage HTML lorsque cela est possible, car il est plus rapide que l'analyse du format HTML. Voir mon propre benchmark "SpannableBuilder vs HTML" sur Github Merci!
la source
Des réponses géniales! J'ai pu utiliser Spannable pour créer du texte de couleur arc-en-ciel (afin que cela puisse être répété pour n'importe quel tableau de couleurs). Voici ma méthode, si cela aide quelqu'un:
Et puis je viens de setText (buildRainboxText (pack_name)); Notez que tous les mots que je passe ont moins de 15 caractères et que cela ne fait que répéter 5 couleurs 3 fois - vous voudrez ajuster les couleurs / la longueur du tableau en fonction de votre utilisation!
la source
pour 24 API et plus (drapeau)
Plus d'informations
la source
Depuis l'API 24, vous avez FROM_HTML_OPTION_USE_CSS_COLORS afin que vous puissiez définir les couleurs en CSS au lieu de le répéter tout le temps avec
font color="
beaucoup plus clair - lorsque vous avez du html et que vous souhaitez mettre en évidence des balises prédéfinies - il vous suffit d'ajouter un fragment CSS en haut de votre htmlla source
25 juin 2020 par @canerkaseler
Après, appelez la fonction ci-dessus. Vous pouvez appeler plus d'un:
Sortie: vous pouvez voir le soulignement et différentes couleurs les uns avec les autres.
@canerkaseler
la source