372 Stimmen

wie man einen bestimmten Text in TextView BOLD macht

Ich weiß nicht, wie man einen bestimmten Text auf TextView BOLD werden lassen kann.

Es ist wie folgt

txtResult.setText(id+" "+name);

Ich möchte, dass die Ausgabe wie folgt aussieht:

1111 neil

id y name sind Variablen, deren Wert ich aus der Datenbank abgerufen habe, und ich möchte die id zu fett, sondern nur die id so dass die name nicht beeinträchtigt wird, habe ich keine Ahnung, wie man das macht.

9voto

live-love Punkte 40586

Sie können diesen Code verwenden, um einen Teil Ihres Textes fett zu machen. Alles, was sich zwischen den fetten html-Tags befindet, wird fett dargestellt.

String myText = "make this <b>bold</b> and <b>this</b> too";
textView.setText(makeSpannable(myText, "<b>(.+?)</b>", "<b>", "</b>"));

public SpannableStringBuilder makeSpannable(String text, String regex, String startTag, String endTag) {

            StringBuffer sb = new StringBuffer();
            SpannableStringBuilder spannable = new SpannableStringBuilder();

            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(text);
            while (matcher.find()) {
                sb.setLength(0);
                String group = matcher.group();
                String spanText = group.substring(startTag.length(), group.length() - endTag.length());
                matcher.appendReplacement(sb, spanText);

                spannable.append(sb.toString());
                int start = spannable.length() - spanText.length();

                spannable.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD), start, spannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
            sb.setLength(0);
            matcher.appendTail(sb);
            spannable.append(sb.toString());
            return spannable;
        }

7voto

Junia Montana Punkte 344

wtsang02 Antwort ist der beste Weg, da Html.fromHtml("") jetzt veraltet ist. Hier bin ich nur gehen, um es ein wenig für wer auch immer ist mit Problem in dynamisch machen das erste Wort fett, egal was die Größe des Satzes zu verbessern.

Erstellen wir zunächst eine Methode, um das erste Wort zu erhalten:

 private String getFirstWord(String input){

    for(int i = 0; i < input.length(); i++){

        if(input.charAt(i) == ' '){

            return input.substring(0, i);
        }
    }

    return input;
}

Nehmen wir nun an, Sie haben eine lange Zeichenkette wie diese:

String sentence = "friendsAwesomeName@gmail.com want's to be your friend!"

Und Sie möchten, dass Ihr Satz wie folgt lautet yourAwesomeName@gmail.com will dein Freund sein! Alles, was du tun musst, ist - das erste Wort zu erhalten und die Länge davon zu erhalten, um das erste Wort fett zu machen, etwa so:

String myFirstWord = getFirstWord(sentence);
int start = 0; // bold will start at index 0
int end = myFirstWord.length(); // and will finish at whatever the length of your first word

Folgen Sie jetzt einfach wtsang02 's Schritte, etwa so:

SpannableStringBuilder fancySentence = new SpannableStringBuilder(sentence);
fancySentence.setSpan(new android.text.style.StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(fancySentence);

Und das war's! Jetzt sollten Sie in der Lage sein, ein Wort mit beliebiger Größe aus einem langen/kurzen Satz fett zu markieren.

5voto

A.I.Shakil Punkte 374

Ist dieser Code nicht die einfachste Lösung?

<string name="string">Please provide your <b>Name</b> properly</string>

Verwenden Sie diese Zeichenfolge nach Belieben :)

Das Ergebnis sieht dann so aus:

Bitte geben Sie Ihr Name richtig

4voto

w3bshark Punkte 2639

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 die Leistungseinbußen hat, die bei der Verwendung von Html.fromHtml() . Wenn Sie Kotlin verwenden, finden Sie hier eine Erweiterungsfunktion, mit der Sie mehrere Teile Ihres Textes einfach auf fett . Dies funktioniert genau wie Markdown und kann bei Bedarf um andere Markdown-Tags erweitert werden.

val yourString = "**This** is your **string**.".makePartialTextsBold()
val anotherString = getString(R.string.something).makePartialTextsBold()

/**
 * This function requires that the parts of the string that need
 * to be bolded are wrapped in ** and ** tags
 */
fun String.makePartialTextsBold(): SpannableStringBuilder {
    var copy = this
    return SpannableStringBuilder().apply {
        var setSpan = true
        var next: String
        do {
            setSpan = !setSpan
            next = if (length == 0) copy.substringBefore("**", "") else copy.substringBefore("**")
            val start = length
            append(next)
            if (setSpan) {
                setSpan(StyleSpan(Typeface.BOLD), start, length,
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
            }
            copy = copy.removePrefix(next).removePrefix("**")
        } while (copy.isNotEmpty())
    }
}

4voto

Areeb Momin Punkte 189

Ich habe diesen Code verwendet, um bestimmte Wörter fett zu markieren...

    Spanned string = Html.fromHtml("Normal string <b>BOLD STRING</b>");
    textView.setText(string);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X