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/

31voto

Shashanth Punkte 4539

Ich weiß, diese Frage ist alt. Andere Antworten hier suggerieren Html.fromHtml() Methode. Ich schlage vor, Sie verwenden HtmlCompat.fromHtml() de androidx.core.text.HtmlCompat Paket. Da dies eine abwärtskompatible Version von Html Klasse.

Beispiel-Code:

import androidx.core.text.HtmlCompat;
import android.text.Spanned;
import android.widget.TextView;

String htmlString = "<h1>Hello World!</h1>";

Spanned spanned = HtmlCompat.fromHtml(htmlString, HtmlCompat.FROM_HTML_MODE_COMPACT);

TextView tvOutput = (TextView) findViewById(R.id.text_view_id);

tvOutput.setText(spanned);

Auf diese Weise können Sie die Prüfung der Android-API-Version vermeiden und es ist einfach zu verwenden (Einzeilenlösung).

0 Stimmen

Was ist der Unterschied zum alten Methot? Was ist der Zweck des html-Modus?

4 Stimmen

Ich habe nach etwas Ähnlichem gesucht. Danke :)

3 Stimmen

Ich habe mich extra angemeldet, um Ihre Antwort hochzustufen. Das sollte jeder verwenden. Danke!

27voto

Rajiv Manivannan Punkte 474

Der unten stehende Code hat bei mir das beste Ergebnis gebracht.

TextView myTextview = (TextView) findViewById(R.id.my_text_view);
htmltext = <your html (markup) character>;
Spanned sp = Html.fromHtml(htmltext);
myTextview.setText(sp);

14voto

Pedro Punkte 11
String value = "<html> <a href=\"http://example.com/\">example.com</a> </html>";
    SiteLink= (TextView) findViewById(R.id.textViewSite);
    SiteLink.setText(Html.fromHtml(value));
    SiteLink.setMovementMethod(LinkMovementMethod.getInstance());

0 Stimmen

Wie kann man die Farbe des Ankers ändern?

0 Stimmen

Android:textColorLink="Farbe"

0 Stimmen

Dies wird die gesamte Textansicht rot einfärben, aber wenn ich nur die Anker-Tags haben möchte, muss ich den <a>-Tag mit <font>-Tags umhüllen und dort Farbe hinzufügen

13voto

prom85 Punkte 16033

Wenn Sie nur etwas Html-Text anzeigen wollen und nicht wirklich eine TextView , dann nehmen Sie eine WebView und verwenden Sie es wie folgt:

String htmlText = ...;
webview.loadData(htmlText , "text/html; charset=UTF-8", null);

Auch hier sind Sie nicht auf einige wenige html-Tags beschränkt.

3 Stimmen

Dies ist zwar ein sehr nützlicher Weg, um die eingeschränkte Anzahl von html-Tags zu umgehen, die von TextView unterstützt werden, hat aber den Nachteil, dass es funktioniert nicht gut con layout_height="wrap_content" . Sie müssen stattdessen eine explizite Höhe oder match_parent festlegen.

5 Stimmen

Webview ist sehr langsam

12voto

Rajendhiran Easu Punkte 245

Der beste Ansatz, um CData Abschnitte für die Zeichenfolge in strings.xml Datei verwenden, um eine tatsächliche Anzeige des HTML-Inhalts auf die TextView die unten Code-Schnipsel wird Ihnen die faire Idee.

//in string.xml file
<string name="welcome_text"><![CDATA[<b>Welcome,</b> to the forthetyroprogrammers blog Logged in as:]]> %1$s.</string>

//and in Java code
String welcomStr=String.format(getString(R.string.welcome_text),username);
tvWelcomeUser.setText(Html.fromHtml(welcomStr));

Der CData-Abschnitt im String-Text hält die Daten des HTML-Tags auch nach der Formatierung des Textes mit der Methode String.format intakt. Html.fromHtml(str) funktioniert also gut und Sie sehen den fettgedruckten Text in der Willkommensnachricht.

Ausgabe:

Willkommen in deinem Lieblings-Musik-App-Store. Eingeloggt als: Benutzername

0 Stimmen

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

0 Stimmen

Danke, du hast mir den Tag gerettet :) Nur eine kleine Ergänzung: Wir müssen diese Prüfung zum obigen Code hinzufügen: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { // für 24 api und mehr textView.setText(Html.fromHtml(welcomStr, Html.FROM_HTML_OPTION_USE_CSS_COLORS)); } else { // oder für ältere api textView.setText(Html.fromHtml(welcomStr)); } . Der Wert für den 2. Parameter flag für API>=24 kann je nach Anforderung beliebig sein.

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