Ändern Sie die Textfarbe eines Wortes in einer TextView

Lesezeit: 5 Minuten

Andern Sie die Textfarbe eines Wortes in einer
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

Andern Sie die Textfarbe eines Wortes in einer
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.

1644354307 491 Andern Sie die Textfarbe eines Wortes in einer
Wahib Ul Haq

Ich habe eine Hilfsfunktion in Kotlin für meinen eigenen Anwendungsfall implementiert und ist vielleicht für jemand anderen nützlich.

fun getCusomTextWithSpecificTextWithDiffColor(textToBold: String, fullText: String,
                                                  targetColor: Int) =
            SpannableStringBuilder(fullText).apply {
                setSpan(ForegroundColorSpan(targetColor),
                        fullText.indexOf(textToBold),
                        (fullText.indexOf(textToBold) + textToBold.length),
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
            }

Wie ich es benutze:

context?.let {
        infoMessage.text = AppUtils.getCusomTextWithSpecificTextWithDiffColor(
                wordAsBold,
                completeSentence, ContextCompat.getColor(it, R.color.white))
    }

1644354307 643 Andern Sie die Textfarbe eines Wortes in einer
Ketan Ramani

BENUTZEN:

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);
}

.

827330cookie-checkÄndern Sie die Textfarbe eines Wortes in einer TextView

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy