892 Stimmen

Wie kann man HTML in TextView anzeigen?

Ich habe einfache HTML :

<h2>Title</h2><br>
<p>description here</p>

Ich möchte einen HTML-gestalteten Text in TextView . Wie ist dies zu tun?

8 Stimmen

Möchten Sie die Tags anzeigen oder weglassen?

1 Stimmen

Ein funktionierendes Beispiel finden Sie unter diesem Link javatechig.com/2013/04/07/how-to-display-html-in-Android-view

1 Stimmen

Wenn Sie nach einer veralteten Lösung suchen, sind Sie hier genau richtig stackoverflow.com/questions/37904739/

1585voto

David Hedlund Punkte 125085

Sie müssen Folgendes verwenden Html.fromHtml() um HTML in Ihren XML-Strings zu verwenden. Ein einfacher Verweis auf einen String mit HTML in Ihrem Layout-XML wird nicht funktionieren.

So sollten Sie in Java vorgehen

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    textView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>", Html.FROM_HTML_MODE_COMPACT));
} else { 
    textView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>"));
}

Und in Kotlin:

textView.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    Html.fromHtml(html, Html.FROM_HTML_MODE_COMPACT)
} else {
    Html.fromHtml(html)
}

0 Stimmen

Wenn ich diese Zeilen einfüge, entsteht eine Lücke zwischen h2 und p, auch wenn ich br entfernt habe, aber es gibt immer noch eine Lücke... wie kann man das beheben?

9 Stimmen

h2 per definitionem einen großen Spielraum um sich herum schafft. und p Wenn Sie die Lücke nicht wollen, sollten Sie vielleicht andere HTML-Elemente verwenden.

0 Stimmen

Wie kann ich HTML-Text im Style-Attribut des Textview-Steuerelements festlegen? Es funktioniert wahrscheinlich nicht.

89voto

Shohan Ahmed Sijan Punkte 4171

setText(Html.fromHtml(bodyData)) es Abgelehnt nach api 24. Jetzt müssen Sie dies tun:

 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
      tvDocument.setText(Html.fromHtml(bodyData,Html.FROM_HTML_MODE_LEGACY));
 } else {
      tvDocument.setText(Html.fromHtml(bodyData));
 }

5 Stimmen

Warum wird FROM_HTML_MODE_LEGACY in API 24+ verwendet?

0 Stimmen

Das hilft mir sehr. Aber es werden immer noch nicht alle Tags unterstützt arkapp.medium.com/Android-set-html-in-text-view-b912e1a96b21

74voto

Felipe Punkte 16402

Schauen Sie sich das an: https://stackoverflow.com/a/8558249/450148

Es ist auch ziemlich gut!!

<resource>
    <string name="your_string">This is an <u>underline</u> text demo for TextView.</string>
</resources>

Es funktioniert nur bei wenigen Tags.

13 Stimmen

Gibt es eine Liste der Tags, die von dieser Methode unterstützt werden?

26 Stimmen

@mente Laut Quellcodes : <a>, <b>, <big>, <blockquote>, <br>, <cite>, <dfn> <div align="...">, <em>, <font size="..." color="... " face="..."> <h1-6>, <i>, <img src="...">, <p>, <small> <strike>, <strong>, , <sup>, <tt>, <u> (source: dzone.com/snippets/wie-anzeigen-html-Android )

0 Stimmen

@JerabekJakub aber Vorsicht, wenn Sie mit img umgehen wollen, müssen Sie Html.ImageGetter implementieren.

46voto

user1299412 Punkte 379

Wenn Sie in der Lage sein wollen, es durch xml zu konfigurieren, ohne irgendeine Änderung im Java-Code, können Sie diese Idee hilfreich finden. Rufen Sie einfach init im Konstruktor auf und setzen Sie den Text als html

public class HTMLTextView extends TextView {
    ... constructors calling init...
    private void init(){
       setText(Html.fromHtml(getText().toString()));
    }    
}

xml:

<com.package.HTMLTextView
android:text="@string/about_item_1"/>

2 Stimmen

Was ist "...". Bitte klären

0 Stimmen

Dies ist die allgemeinere und sauberere Lösung

1 Stimmen

Einfacher wäre es, einfach einen verbindlichen Adapter zu erstellen, oder? @BindingAdapter(value = ["htmlText"]) fun TextView.setHtmlText(string: String?) { text = HtmlCompat.fromHtml(string?:"", HtmlCompat.FROM_HTML_MODE_COMPACT) }

39voto

Phileo99 Punkte 5406

Wenn Sie versuchen, HTML aus einer String-Ressource-ID anzuzeigen, wird die Formatierung möglicherweise nicht auf dem Bildschirm angezeigt. Wenn das bei Ihnen der Fall ist, versuchen Sie stattdessen CDATA-Tags zu verwenden:

strings.xml:
<string name="sample_string"><![CDATA[<h2>Title</h2><br><p>Description here</p>]]></string>

...

MainActivity.java:
text.setText(Html.fromHtml(getString(R.string.sample_string));

Siehe dies Beitrag für weitere Einzelheiten.

1 Stimmen

Danke, damit habe ich es geschafft - mit API 23.

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