Ändern Sie die Textfarbe eines Wortes in einer TextView
Lesezeit: 5 Minuten
Getreidestreuer
Ich suche nach einer Möglichkeit, die Farbe eines Textes eines einzelnen Wortes in einem zu ändern TextView von innen ein Activity.
Zum Beispiel damit:
String first = "This word is ";
String next = "red"
TextView t = (TextView) findViewById(R.id.textbox);
t.setText(first + next);
Wie würde ich die Farbe der ändern next Text auf rot?
Mögliches Duplikat von Ist es möglich, mehrere Stile in einer TextView zu haben?
– bladibla
9. Oktober 2013 um 18:52 Uhr
stackoverflow.com/questions/9754076/…
– Ciro Santilli 新疆再教育营六四事件法轮功郝海东
8. Februar 2016 um 14:31 Uhr
stackoverflow.com/a/59628947/12478830
– MMG
21. Mai 2020 um 7:20 Uhr
Dan
Der einfachste Weg, den ich kenne, ist, einfach HTML zu verwenden.
String first = "This word is ";
String next = "<font color="#EE0000">red</font>";
t.setText(Html.fromHtml(first + next));
Dies erfordert jedoch, dass Sie die TextView neu erstellen, wenn (falls?) Sie die Farbe ändern möchten, was zu Problemen führen kann.
Dies ist definitiv der einfachste Weg, aber sollte die Farbe nicht color=’#EE0000′ sein, wird das Pfund-Symbol benötigt, um eine hexadezimale Farbe anzugeben.
– Tom
13. Mai 2012 um 14:36 Uhr
Behoben, danke! Ich kann mich nicht erinnern, ob ich dies aus dem tatsächlichen Code oder aus dem Speicher mit einer Farbgenerator-Website kopiert habe, sodass es möglicherweise vorher nicht funktioniert hat.
– Dan
14. Mai 2012 um 19:16 Uhr
Ok, nur sicher gehen! Wie ich herausgefunden habe, können Sie auch keine 8-stelligen Hex-Codes verwenden, also keine Alpha-Komponente. Das hat mich kurz stutzig gemacht.
– Tom
15. Mai 2012 um 0:15 Uhr
Verwenden fromHtml ist jetzt veraltet
– Alex Jolig
16. April 2017 um 6:19 Uhr
Html.fromHtml ist veraltet. Diese Lösung hat bei mir funktioniert!
– coderpc
27. Juli 2017 um 1:03 Uhr
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);
Sie müssen Spannable verwenden. Dies ermöglicht Ihnen auch, die Größe von Text zu erhöhen, ihn fett zu machen usw. … sogar ein Bild einzufügen.
Gute Antwort, danke. In diesem Fall kann statt “start + next.length()” auch “s.length()” verwendet werden: int end = s.length();
– Oleg
8. August 2014 um 14:27 Uhr
Falls jemand nach Xamarin.Android Solution sucht. Sie können zuweisen SpannableString Objekt durch Verwendung TextFormatted Eigentum Ihrer Kontrolle.
– Jamshaid K.
5. Mai 2017 um 15:48 Uhr
Konnte das nicht zum Laufen bringen. Am Ende entschied ich mich für die Lösung von BK.
– 2b77bee6-5445-4c77-b1eb-4df3e5
5. Juni 2017 um 15:35 Uhr
1. Wenn es einen Build gibt, ist es immer besser, ihn zu verwenden. 2. was hat bei dir nicht funktioniert? Diese Lösung ist alt, sehr alt, einige APIs wurden geändert, hinzugefügt, entfernt, Fehler behoben, was genau hat nicht funktioniert?
– codeScriber
10. Juni 2017 um 19:03 Uhr
Ich bekomme java.lang.String cannot be cast to android.text.Spannable Error.
– Lashgar
5. Dezember 2018 um 8:10 Uhr
Verwenden Sie SpannableStringBuilder wie folgt:
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);
Gibt es etwas, das ich ersetzen kann new ForegroundColorSpan(Color) mit , damit der Text seine ursprüngliche Standardfarbe behält?
– cjnash
31. Juli 2017 um 18:52 Uhr
Wie füge ich einfachen Text (String) in der Mitte der Textansicht hinzu?
– Ragavendra M
26. Dezember 2018 um 10:10 Uhr
Für lange Zeichenfolgen können Sie Folgendes verwenden:
String help = getString(R.string.help);
help = help.replace("some word", "<font color="#EE0000">some word</font>");
txtDesc.setText(Html.fromHtml(help));
Wenn Sie den Status aller Instanzen einer bestimmten ändern möchten String in einem TextView Text (Groß-/Kleinschreibung wird nicht beachtet), den Sie verwenden können StringBuilders und SpannableString so was:
StringBuilder textBuilder = new StringBuilder(myTextView.getText().toString());
StringBuilder searchedTextBuilder = new StringBuilder((mySearchedString));
SpannableString spannableString = new SpannableString(myTextView.getText().toString());
int counter = 0;
int index = 0;
for (int i = 0;i < textBuilder.length() - mySearchedString.length() - 1;i++)
{
counter = 0;
if (Character.toLowerCase(textBuilder.charAt(i)) == Character.toLowerCase(searchedTextBuilder.charAt(index)))
{
counter++;
index++;
for (int j = 1,z = i + 1;j < mySearchedString.length() - 1;j++,z++)
{
if (Character.toLowerCase(textBuilder .charAt(z)) == Character.toLowerCase(searchedTextBuilder .charAt(index)))
{
counter++;
index++;
}
else
{
index++;
if (index % mySearchedString.length() == 0)
{
index = 0;
}
break;
}
}
if (counter == mySearchedString.length() - 1) // A match
{
spannableString.setSpan(new ForegroundColorSpan(Color.RED), i,
i + mySearchedString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // Do the change you want(In this case changing the fore ground color to red)
index = 0;
continue;
}
else
{
index = 0;
continue;
}
}
}
myTextView.setText(spannableString);
}
Speichern Sie das Ganze TextView Text in a StringBuilder.
Speichern Sie die gesuchte Zeichenfolge in a StringBuilder.
Bewahre das Ganze auf TextView Text in a SpannableString
Machen Sie eine einfache Operation, um alle zu finden String Instanzen innerhalb der TextView Text und ändern Sie sie, wenn sie erreicht sind.
Legen Sie den Textwert von fest TextView zum SpannableString.
Wahib Ul Haq
Ich habe eine Hilfsfunktion in Kotlin für meinen eigenen Anwendungsfall implementiert und ist vielleicht für jemand anderen nützlich.
makeTextBold("Your order is accepted","accepted", textView);
makeTextBold("Your order is canceled","canceled", textView);
Funktion:
public static void makeTextBold(String sentence, String word, AppCompatTextView textView) {
SpannableStringBuilder builder = new SpannableStringBuilder();
int startIndex = sentence.indexOf(word.toLowerCase().trim());
int endIndex = startIndex + word.toLowerCase().trim().length();
SpannableString spannableString = new SpannableString(sentence);
StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
spannableString.setSpan(boldSpan, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); //To make text Bold
spannableString.setSpan(new ForegroundColorSpan(Color.RED), startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); //To change color of text
builder.append(spannableString);
textView.setText(builder, TextView.BufferType.SPANNABLE);
}
.
8273300cookie-checkÄndern Sie die Textfarbe eines Wortes in einer TextViewyes
Mögliches Duplikat von Ist es möglich, mehrere Stile in einer TextView zu haben?
– bladibla
9. Oktober 2013 um 18:52 Uhr
stackoverflow.com/questions/9754076/…
– Ciro Santilli 新疆再教育营六四事件法轮功郝海东
8. Februar 2016 um 14:31 Uhr
stackoverflow.com/a/59628947/12478830
– MMG
21. Mai 2020 um 7:20 Uhr