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.

37voto

android developer Punkte 111449

Wenn Sie die Zeichenfolge aus XML verwenden möchten, können Sie wie folgt vorgehen:

strings.xml (der "CDATA"-Teil ist wichtig, sonst funktioniert es nicht)

<string name="test">
     <![CDATA[
 <b>bold!</b> normal
    ]]>
</string>

Layout-Datei

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:layout_gravity="center" />

</FrameLayout>

Code

textView.text = HtmlCompat.fromHtml(getString(R.string.test), HtmlCompat.FROM_HTML_MODE_LEGACY)

25voto

Ridha Rezzag Punkte 3242

Es ist einfach, den angegebenen Text zu schließen, zum Beispiel so <b>"your text here:"</b>

<string name="headquarters">"<b>"Headquarters:"</b>" Mooresville, North Carolina, U.S.</string>

Ergebnis: Hauptsitz: Mooresville, North Carolina, Vereinigte Staaten von Amerika

21voto

Devansh Maurya Punkte 692

Wenn Sie Kotlin verwenden, wird es sogar noch einfacher, indem Sie core-ktx da sie eine domänenspezifische Sprache (DSL) um dies zu tun:

val string: SpannedString = buildSpannedString {
    bold {
        append("foo")
    }
    append("bar")     
}

Weitere Optionen, die das Programm bietet, sind:

append("Hello There")
bold {
    append("bold")
    italic {
        append("bold and italic")
        underline {
            append("then some text with underline")
        }
    }
}

Endlich können Sie einfach zu:

textView.text = string

14voto

Yusuf X Punkte 14165

Basierend auf der Antwort von @mladj0ni habe ich den folgenden Code zum Laufen gebracht. Das Problem war, dass man bei der Verwendung von String.format wird die HTML-Auszeichnung entfernt, so dass Sie die Klammersymbole in strings.xml entschlüsseln müssen:

strings.xml:

<string name="welcome_messages">Hello, %1$s! You have &lt;b>%2$d new messages&lt;/b>.</string>

code.java:

String unspanned = String.format(Locale.US, "%s%s", getResources().getString(R.string. welcome_messages), 99);

Spanned spanned;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
    spanned = Html.fromHtml(unspanned, Html.FROM_HTML_MODE_LEGACY);
} else {
    spanned = Html.fromHtml(unspanned);
}

textView.setText(spanned);

Es ist einfacher als SpannableStringBuilder. Wie für die Leistung, wenn Sie nur eine Zeichenfolge anzeigen, dann wird der Benutzer nicht bemerken, die zusätzliche Millisekunde, um es zu parsen.

Siehe die Dokumentation ici .

11voto

Krish Punkte 546

Hier ist eine bessere Lösung, wenn Sie mehrere Texte fett machen wollen. Ich habe den Code von Eitan verbessert. Danke Eitan.

public static SpannableStringBuilder makeSectionOfTextBold(String text, String... textToBold) {
    SpannableStringBuilder builder = new SpannableStringBuilder(text);

    for (String textItem :
            textToBold) {
        if (textItem.length() > 0 && !textItem.trim().equals("")) {
            //for counting start/end indexes
            String testText = text.toLowerCase(Locale.US);
            String testTextToBold = textItem.toLowerCase(Locale.US);
            int startingIndex = testText.indexOf(testTextToBold);
            int endingIndex = startingIndex + testTextToBold.length();

            if (startingIndex >= 0 && endingIndex >= 0) {
                builder.setSpan(new StyleSpan(Typeface.BOLD), startingIndex, endingIndex, 0);
            }
        }
    }

    return builder;
}

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