Vergessen Sie nicht, sich der Benutzereingabe mit zu entziehen Html.escapeHtml(str).
Kelunik
1
Hinzugefügt in API Level 1
2red13
3
Nur eine Warnung. Ich hatte ein Problem, als mein Text in Großbuchstaben geschrieben werden musste. Ich habe android: textAllCaps = "true" in XML verwendet und gleichzeitig meinen HTML-Inhalt in Großbuchstaben geschrieben. Es hat nicht funktioniert. Ich habe das XML-Attribut entfernt und es funktioniert jetzt einwandfrei. Seien Sie vorsichtig, denn wenn Sie setAllCaps () im Code verwenden, tritt dasselbe Problem auf.
super, danke, kann auch BackgroundColorSpan machen. gibt es einen kleinen Tippfehler in Ihrem Beispiel WordToSpan und WordtoSpan, notieren Sie den Fall auf , um
Funktioniert nicht für mich, wenn ich `java.lang.StringIndexOutOfBoundsException erhalte: length = 3; index = 12`
Muhammad Babar
1
StringIndexOutOfBoundsException selbst erklärt. Sie greifen auf Zeichenfolgen zu, die über die Länge hinausgehen.
Swapnil Kotwal
1
Meine Zeichenfolgen wurden nicht festgelegt, sodass Zeichenfolgen zur Laufzeit der App generiert wurden. Ich habe fast alle Antworten auf diese Frage ausprobiert. Aber nur diese Lösung hat bei mir funktioniert.
Md. Sabbir Ahmed
33
Sie können verwenden Spannable, um Effekte auf Ihre TextView:
Hier ist mein Beispiel für das Färben nur des ersten Teils eines TextViewTextes (während Sie die Farbe dynamisch einstellen können, anstatt sie wie im HTML-Beispiel hart in einen String zu codieren!)
mTextView.setText("Red text is here",BufferType.SPANNABLE);Spannable span =(Spannable) mTextView.getText();
span.setSpan(newForegroundColorSpan(0xFFFF0000),0,"Red".length(),Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
In diesem Beispiel können Sie 0xFFFF0000 durch a ersetzen 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)));
Fügen Sie in Ihrer TextViewUtils-Klasse diese Methode hinzu
/***
*
* @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;}
Ich habe gerade aktualisiert, überprüfe es einmal, es funktioniert für mich.
Abdul Rizwan
Myabe Sie verwenden Html.fromHtml für die Verwendung dieser Zeichenfolge?
Sergey Shustikov
In der Datei string.xml habe ich eine Variable erstellt und diese festgelegt. Sie funktioniert gerade für mich. Ich mache das. Können Sie bitte Ihre Zeichenfolge hier angeben?
Abdul Rizwan
5
Es ist besser, die Zeichenfolge in der Zeichenfolgendatei als solche zu verwenden:
<stringname="some_text">
<![CDATA[
normal color <fontcolor=\'#06a7eb\'>special color</font>]]>
</string>
Ich habe einen Code für eine andere Frage aufgeschrieben, die dieser ähnlich ist, aber diese Frage wurde dupliziert, sodass ich sie dort nicht beantworten kann. Ich setze meinen Code nur hier ein, wenn jemand nach derselben Anforderung sucht.
Der Code funktioniert nicht vollständig. Sie müssen einige geringfügige Änderungen vornehmen, damit er funktioniert.
Hier ist der Code:
Ich habe die @ Graeme-Idee verwendet, spannbaren Text zu verwenden.
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);
Verwenden Sie die SpannableBuilder-Klasse anstelle der HTML-Formatierung, sofern dies möglich ist, da sie schneller als das Parsen des HTML-Formats ist. Siehe meinen eigenen Benchmark "SpannableBuilder vs HTML" auf Github
Danke!
Tolle Antworten! Ich konnte Spannable verwenden, um regenbogenfarbenen Text zu erstellen (dies konnte also für jede Reihe von Farben wiederholt werden). Hier ist meine Methode, wenn sie jemandem hilft:
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;}
Und dann setze ich einfachText (buildRainboxText (pack_name)); Beachten Sie, dass alle Wörter, die ich eingebe, weniger als 15 Zeichen enthalten und dies nur dreimal 5 Farben wiederholt - Sie möchten die Farben / Länge des Arrays für Ihre Verwendung anpassen!
Seit API 24 haben Sie FROM_HTML_OPTION_USE_CSS_COLORS, sodass Sie Farben in CSS definieren können, anstatt sie ständig zu wiederholen. font color="
Wenn Sie etwas HTML haben und einige vordefinierte Tags hervorheben möchten, müssen Sie nur das CSS-Fragment oben in Ihrem HTML hinzufügen
Antworten:
Ja, wenn Sie die Eigenschaft
String
withhtml
's formatieren, übergeben Siefont-color
sie an die MethodeHtml.fromHtml(your text here)
quelle
Html.escapeHtml(str)
.Html.fromHtml(String)
ist jetzt veraltet, stattdessen verwendenHtml.fromHtml(String, Html.FROM_HTML_MODE_LEGACY)
. Weitere Informationen finden Sie hier.Sie können Linien mit mehreren Farben ohne HTML wie folgt drucken:
quelle
Sie können verwenden
Spannable
, um Effekte auf IhreTextView
:Hier ist mein Beispiel für das Färben nur des ersten Teils eines
TextView
Textes (während Sie die Farbe dynamisch einstellen können, anstatt sie wie im HTML-Beispiel hart in einen String zu codieren!)In diesem Beispiel können Sie 0xFFFF0000 durch a ersetzen
getResources().getColor(R.color.red)
quelle
Ich habe so gemacht:
Stellen Sie die Farbe auf Text ein, indem Sie String und Farbe übergeben :
Stellen Sie Text in TextView / Button / EditText usw. ein, indem Sie den folgenden Code aufrufen:
Textübersicht:
Farbige Zeichenfolge abrufen:
Stellen Sie Text in TextView aus zwei Zeichenfolgen mit unterschiedlichen Farben ein:
Getan
quelle
Html.fromHtml("...")
durch Anrufe anHtml.fromHtml("...", FROM_HTML_MODE_LEGACY)
Verwenden Sie SpannableStringBuilder
quelle
Hey Leute, ich habe das getan, probier es aus
Fügen Sie in Ihrer TextViewUtils-Klasse diese Methode hinzu
quelle
Es ist besser, die Zeichenfolge in der Zeichenfolgendatei als solche zu verwenden:
Verwendung:
quelle
Ich habe einen Code für eine andere Frage aufgeschrieben, die dieser ähnlich ist, aber diese Frage wurde dupliziert, sodass ich sie dort nicht beantworten kann. Ich setze meinen Code nur hier ein, wenn jemand nach derselben Anforderung sucht.
Der Code funktioniert nicht vollständig. Sie müssen einige geringfügige Änderungen vornehmen, damit er funktioniert.
Hier ist der Code:
Ich habe die @ Graeme-Idee verwendet, spannbaren Text zu verwenden.
Zufällige Farbmethode:
quelle
Versuche dies:
quelle
Verwenden Sie die SpannableBuilder-Klasse anstelle der HTML-Formatierung, sofern dies möglich ist, da sie schneller als das Parsen des HTML-Formats ist. Siehe meinen eigenen Benchmark "SpannableBuilder vs HTML" auf Github Danke!
quelle
Tolle Antworten! Ich konnte Spannable verwenden, um regenbogenfarbenen Text zu erstellen (dies konnte also für jede Reihe von Farben wiederholt werden). Hier ist meine Methode, wenn sie jemandem hilft:
Und dann setze ich einfachText (buildRainboxText (pack_name)); Beachten Sie, dass alle Wörter, die ich eingebe, weniger als 15 Zeichen enthalten und dies nur dreimal 5 Farben wiederholt - Sie möchten die Farben / Länge des Arrays für Ihre Verwendung anpassen!
quelle
für 24 API und mehr (Flag)
Mehr Info
quelle
Seit API 24 haben Sie FROM_HTML_OPTION_USE_CSS_COLORS, sodass Sie Farben in CSS definieren können, anstatt sie ständig zu wiederholen.
font color="
Wenn Sie etwas HTML haben und einige vordefinierte Tags hervorheben möchten, müssen Sie nur das CSS-Fragment oben in Ihrem HTML hinzufügenquelle
25. Juni 2020 von @canerkaseler
Rufen Sie danach die obige Funktion auf. Sie können mehrere anrufen:
Ausgabe: Sie können Unterstreichungen und verschiedene Farben miteinander sehen.
@canerkaseler
quelle