Ich möchte den Text einer TextView-Ansicht über die Methode .setText ("") ändern und gleichzeitig einen Teil des Textes einfärben (oder fett, kursiv, transparent usw. machen) und nicht den Rest. Beispielsweise:
title.setText("Your big island <b>ADVENTURE!</b>";
Ich weiß, dass der obige Code falsch ist, aber er hilft zu veranschaulichen, was ich erreichen möchte. Wie würde ich das machen?
Antworten:
Verwenden Sie Spannweiten .
Beispiel:
quelle
quelle
<font color="#FFAADD>text</font>
funktioniert also nicht?Ich hoffe das hilft dir (es funktioniert mit mehreren Sprachen).
Und mit Ihrem Java-Code können Sie Folgendes tun:
Auf diese Weise wird nur der Teil "Test" farbig (und fett) dargestellt.
quelle
Hier ist ein Beispiel, das nach allen Vorkommen eines Wortes sucht (ohne Berücksichtigung der Groß- und Kleinschreibung) und sie rot färbt:
quelle
Sie können a verwenden
Spannable
, um bestimmten Teilen eines Textes bestimmte Aspekte zuzuweisen. Ich kann ein Beispiel nachschlagen, wenn Sie wollen.Ah, von hier aus auf Stackoverflow .
quelle
Wenn Sie Kotlin verwenden, können Sie mit der android-ktx- Bibliothek Folgendes tun
Das
bold
ist eine Erweiterungsfunktion anSpannableStringBuilder
. In der Dokumentation finden Sie eine Liste der Vorgänge, die Sie verwenden können.Ein anderes Beispiel:
Wo
green
ist eine aufgelöste RGB-Farbe.Es ist sogar möglich, Bereiche zu verschachteln, sodass Sie so etwas wie ein eingebettetes DSL erhalten:
Sie benötigen Folgendes in Ihrer App-Modulebene,
build.gradle
damit es funktioniert:quelle
val spannableStringBuilder = SpannableStringBuilder() spannableStringBuilder.bold { underline { color(R.color.test_color) { append(underlinedText) } } }
Wenn Sie HTML verwenden möchten, müssen Sie verwenden
TextView.setText(Html.fromHtml(String htmlString))
Wenn Sie dies häufig / wiederholt tun möchten, können Sie sich eine Klasse ( SpannableBuilder ) ansehen, die ich geschrieben habe, da sie
Html.fromHtml()
nicht sehr effizient ist (sie verwendet eine große XML-Parsing-Maschinerie im Inneren). Es wird in diesem Blogeintrag beschrieben .quelle
Verwenden von
quelle
oder verwenden Sie diesen Code:
quelle
Ich verwende es gerne,
SpannableStringBuilder
indem ich die verschiedenen Bereiche einzeln anhänge, anstatt setSpan durch Berechnung der Zeichenfolgenlängen aufzurufenals: (Kotlin-Code)
quelle
Sie können zwei oder mehr Bereiche verketten. Auf diese Weise ist es einfacher, dynamischen Text mithilfe des Längenwerts einzufärben.
quelle
Verwenden Sie diesen Code, es ist hilfreich
quelle
Html.fromHtml
ist veraltetVerwenden Sie stattdessen HtmlCompat
quelle