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.

465voto

Raghav Sood Punkte 81319

Erstellen Sie einfach Ihren String in HTML und setzen Sie ihn:

String sourceString = "<b>" + id + "</b> " + name; 
mytextview.setText(Html.fromHtml(sourceString));

459voto

wtsang02 Punkte 18123

Sie können zwar die Html.fromHtml() können Sie einen nativeren Ansatz verwenden, nämlich SpannableStringBuilder diese Beitrag kann hilfreich sein.

SpannableStringBuilder str = new SpannableStringBuilder("Your awesome text");
str.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD), INT_START, INT_END, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TextView tv=new TextView(context);
tv.setText(str);

219voto

Filipe Brito Punkte 4498

Erstens: Sie brauchen sich keine Gedanken über die Verwendung des langsamen Codes aus der Raghav Soods Antwort .

Zweitens: Sie müssen keine Erweiterungsfunktion schreiben, die von Antwort von w3bshark bei der Verwendung von Kotlin.

Finnisch: Alles, was Sie tun müssen, ist, die Kotlin Android-ktx-Bibliothek von Google (siehe ici um weitere Informationen zu erhalten und zu erfahren, wie Sie sie in Ihr Projekt integrieren können):

// Suppose id = 1111 and name = neil (just what you want). 
val s = SpannableStringBuilder()
          .bold { append(id) } 
          .append(name)
txtResult.setText(s) 

Produziert: 1111 neil


UPDATE:

Weil ich denke, dass es anderen helfen kann, und um zu zeigen, wie weit man gehen kann, hier weitere Anwendungsfälle.

  • Wenn Sie einen Text mit einigen Teilen in blau und kursiv anzeigen möchten:

    val myCustomizedString = SpannableStringBuilder()
        .color(blueColor, { append("A blue text ") })
        .append("showing that ")
        .italic{ append("it is painless") }
  • Wenn Sie einen Text sowohl fett als auch kursiv darstellen möchten:

        bold { italic { append("Bold and italic") } }

Kurz gesagt, bold , append , color y italic sind Erweiterungsfunktionen zu SpannableStringBuilder . Eine weitere Erweiterungsfunktion finden Sie in der offizielle Dokumentation von wo aus Sie nach anderen Möglichkeiten suchen können.

41voto

Eitan Punkte 413

Ich war der Meinung, dass die gewählte Antwort kein zufriedenstellendes Ergebnis lieferte. Ich habe meine eigene Funktion geschrieben, die 2 Zeichenketten benötigt: den vollständigen Text und den Teil des Textes, den Sie fett machen wollen.

Sie gibt einen SpannableStringBuilder zurück, in dem der 'textToBold' aus 'text' fett gedruckt ist.

Ich finde die Möglichkeit, einen Teilstring fett zu machen, ohne ihn in Tags einzuschließen, nützlich.

    /**
     * Makes a substring of a string bold.
     * @param text          Full text
     * @param textToBold    Text you want to make bold
     * @return              String with bold substring
     */

    public static SpannableStringBuilder makeSectionOfTextBold(String text, String textToBold){

        SpannableStringBuilder builder=new SpannableStringBuilder();

        if(textToBold.length() > 0 && !textToBold.trim().equals("")){

            //for counting start/end indexes
            String testText = text.toLowerCase(Locale.US);
            String testTextToBold = textToBold.toLowerCase(Locale.US);
            int startingIndex = testText.indexOf(testTextToBold);
            int endingIndex = startingIndex + testTextToBold.length();
            //for counting start/end indexes

            if(startingIndex < 0 || endingIndex <0){
                return builder.append(text);
            }
            else if(startingIndex >= 0 && endingIndex >=0){

                builder.append(text);
                builder.setSpan(new StyleSpan(Typeface.BOLD), startingIndex, endingIndex, 0);
            }
        }else{
            return builder.append(text);
        }

        return builder;
  }

40voto

Jadamec Punkte 888

Wie wtsang02 sagte, ist die Verwendung von HTML ein teurer Overhead. Verwenden Sie einfach die native Lösung. Wenn Sie die Zeichenfolge nicht ändern müssen, verwenden Sie einfach SpannableString, nicht SpannableStringBuilder.

String boldText = "id";
String normalText = "name";
SpannableString str = new SpannableString(boldText + normalText);
str.setSpan(new StyleSpan(Typeface.BOLD), 0, boldText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(str);

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