Ich weiß nicht, wie ich einen bestimmten Text in TextView fett machen soll.
es ist so
txtResult.setText(id+" "+name);
Ich möchte, dass die Ausgabe folgendermaßen aussieht:
1111 neil
id
und name
sind Variablen, die ich den Wert aus der Datenbank abgerufen habe, und ich möchte die id
zu fett machen, aber nur die, id
damit die name
nicht betroffen sind, ich habe keine Ahnung, wie das geht.
android
textview
android-textattributes
Budi Darmawan
quelle
quelle
Antworten:
Erstellen Sie einfach Ihren String in HTML und legen Sie ihn fest:
quelle
Html.fromHtml()
ist jetzt veraltetWährend Sie Html.fromHtml () verwenden können , können Sie einen nativeren Ansatz verwenden , nämlich SpannableStringBuilder. Dieser Beitrag kann jedoch hilfreich sein.
quelle
Erstens: Sie müssen sich keine Gedanken über die Verwendung des langsamen Leistungscodes aus der Antwort von Raghav Sood machen .
Zweitens: Sie müssen keine Erweiterungsfunktion schreiben, die durch die Antwort von w3bshark bereitgestellt wird , wenn Sie Kotlin verwenden.
Finnaly: Alles , was Sie tun müssen, ist die Kotlin verwenden Android-ktx Bibliothek von Google (siehe hier , um weitere Informationen und wie Sie sind es auf Ihrem Projekt zu finden):
AKTUALISIEREN:
Weil ich denke, es kann jemand anderem helfen und zeigen, wie weit Sie hier gehen können, gibt es mehr Anwendungsfälle.
Wenn Sie einen Text mit einigen Teilen in Blau und Kursiv anzeigen müssen:
Wenn Sie einen Text fett und kursiv anzeigen müssen:
Kurz gesagt
bold
,append
,color
unditalic
sind ErweiterungsfunktionenSpannableStringBuilder
. Weitere Erweiterungsfunktionen finden Sie in der offiziellen Dokumentation , von wo aus Sie nach anderen Möglichkeiten suchen können.quelle
Ich dachte, dass die gewählte Antwort kein zufriedenstellendes Ergebnis lieferte. Ich habe meine eigene Funktion geschrieben, die 2 Zeichenfolgen benötigt. Der vollständige Text und der Teil des Textes, den Sie fett machen möchten.
Es wird ein SpannableStringBuilder zurückgegeben, bei dem 'textToBold' von 'text' fett gedruckt ist.
Ich finde die Möglichkeit, einen Teilstring fett zu machen, ohne ihn in Tags zu verpacken, nützlich.
quelle
Wie wtsang02 sagte, ist die Verwendung von HTML ein teurer Aufwand. Verwenden Sie einfach die native Lösung. Wenn Sie die Zeichenfolge nicht ändern müssen, verwenden Sie einfach SpannableString und nicht SpannableStringBuilder.
quelle
Wenn Sie die Zeichenfolge aus XML verwenden möchten, können Sie Folgendes tun:
string.xml (der Teil "CDATA" ist wichtig, sonst funktioniert er nicht)
Layoutdatei
Code
quelle
<string name="test"><b>text bold</b> other text</string>
. Funktioniert nicht, wenn ich schreibe<![CDATA[
Es ist einfach, einfach den angegebenen Text wie folgt zu schließen
<b>"your text here:"</b>
Ergebnis: Hauptsitz: Mooresville, North Carolina, USA
quelle
Wenn Sie Kotlin verwenden, wird die Verwendung noch einfacher
core-ktx
, da hierfür eine domänenspezifische Sprache (DSL) bereitgestellt wird:Weitere Optionen sind:
Endlich können Sie einfach:
quelle
Hier ist eine bessere Lösung, wenn Sie mehrere Texte fett formatieren möchten. Ich habe Eitans Code verbessert. danke Eitan.
quelle
Basierend auf der Antwort von @ mladj0ni habe ich den folgenden Code zum Laufen gebracht. Das Problem war, dass bei Verwendung von String.format das HTML-Markup entfernt wird, sodass Sie die Klammer-Symbole in strings.xml umgehen müssen:
string.xml:
<string name="welcome_messages">Hello, %1$s! You have <b>%2$d new messages</b>.</string>
code.java:
Es ist einfacher als SpannableStringBuilder. Wenn Sie nur eine Zeichenfolge anzeigen, bemerkt der Benutzer die zusätzliche Millisekunde zum Parsen nicht.
Siehe die Dokumentation hier .
quelle
Mit diesem Code können Sie einen Teil Ihres Textes fett setzen. Für alles, was sich zwischen den fett gedruckten HTML-Tags befindet, wird es fett gedruckt.
quelle
Versuche dies. Es kann definitiv helfen
quelle
Machen Sie das erste Zeichen der Zeichenfolge spannbar, während Sie nach Zeichen in Liste / Recycler suchen
zuvor so hervorgehoben, aber ich wollte wie unten sein
Dafür habe ich nach der Wortlänge gesucht, wenn sie gleich 1 ist. Ich habe die Hauptzeichenfolge in Wörter getrennt und die Wortstartposition berechnet. Dann habe ich nach Wörtern gesucht, die mit char beginnen.
quelle
Ich bin hierher gekommen, um eine aktuellere Lösung anzubieten, weil ich mit den vorhandenen Antworten nicht zufrieden war. Ich brauchte etwas, das für übersetzte Texte funktioniert und nicht den Leistungseinbruch hat, den ich habe
Html.fromHtml()
. Wenn Sie Kotlin verwenden, finden Sie hier eine Erweiterungsfunktion, mit der mehrere Teile Ihres Textes leicht fett gedruckt werden können . Dies funktioniert genau wie Markdown und kann bei Bedarf erweitert werden, um andere Markdown-Tags zu unterstützen.quelle
Die Antwort wtsang02 ist der beste Weg, da Html.fromHtml ("") jetzt veraltet ist. Hier werde ich es nur ein wenig verbessern, für alle, die Probleme haben, das erste Wort dynamisch fett zu machen, unabhängig von der Größe des Satzes.
Zuerst erstellen wir eine Methode, um das erste Wort zu erhalten:
Angenommen, Sie haben eine lange Zeichenfolge wie diese:
Und du willst, dass dein Satz so ist wie [email protected] will dein Freund sein! Alles, was Sie tun müssen, ist, das erste Wort zu erhalten und die Länge zu ermitteln, um das erste Wort fett zu machen.
Befolgen Sie nun einfach die Schritte von wtsang02 wie folgt :
Und das ist es! Jetzt sollten Sie in der Lage sein, ein Wort mit einer beliebigen Größe aus einem langen / kurzen Satz fett zu schreiben. Hoffe es wird jemandem helfen, fröhliches Codieren :)
quelle
Dies ist die Kotlin-Erweiterungsfunktion, die ich dafür verwende
Verwendung:
.
quelle
Sie können die beiden Zeichenfolgen im Builder separat hinzufügen. Eine davon ist spannedString, die andere ist eine reguläre Zeichenfolge. Auf diese Weise müssen Sie die Indizes nicht berechnen.
quelle
Wenn die Position von fettem Text festgelegt ist (z. B. wenn am Anfang der Textansicht steht), verwenden Sie zwei verschiedene Textansichten mit demselben Hintergrund. Dann können Sie den textStyle der anderen textView fett formatieren.
Dies erfordert doppelt so viel Speicher wie eine einzelne Textansicht, aber die Geschwindigkeit erhöht sich.
quelle
Ein weiterer kundenspezifischerer Code
quelle
Falls jemand die Datenbindung verwendet. Wir können den Bindungsadapter so definieren
Dann können wir es in einer Textansicht verwenden
wo fett_text ist
quelle
Es ist langweilig, einen Weg zu finden, falls Sie mit der Lokalisierung in mehreren Sprachen umgehen möchten. Es funktioniert jedoch. Nehmen wir an, wir möchten Folgendes:
Auf Englisch:
In Spanisch:
Sie müssen 3 Zeichenfolgen erstellen
Englisch:
Spanisch:
Jetzt können Sie dies tun:
quelle
Ihre String-Ressource
Ihre Java-Klasse
quelle
Hier ist meine Komplettlösung für dynamische String-Werte mit Fallprüfung.
Z.B. completeString = "Ich bin mutig"
FALL I wenn
*targetStringToFormat* = "bold"
und*matchCase* = true
FALL II wenn
*targetStringToFormat* = "bold"
und*matchCase* = false
Bewerben:
Hoffentlich hilft das!
quelle