Ich habe einfaches HTML :
<h2>Title</h2><br>
<p>description here</p>
Ich möchte HTML-Text anzeigen TextView
. Wie macht man das?
android
html
xml-parsing
textview
UMAR
quelle
quelle
Antworten:
Sie müssen verwenden
Html.fromHtml()
, um HTML in Ihren XML-Zeichenfolgen zu verwenden. Das einfache Verweisen auf einen String mit HTML in Ihrem Layout-XML funktioniert nicht.Folgendes sollten Sie tun:
quelle
h2
per definitionem schafft sich viel Spielraum um sich herum. undp
kommt auch mit etwas Spielraum. Wenn Sie die Lücke nicht möchten, sollten Sie andere HTML-Elemente verwenden.android.text.Html.fromHtml
. Ich weiß, dass die meisten IDEs das Problem für Sie beheben werden, aber aus Gründen der Lesbarkeit ist es besser, die Paketnamen zu kennen.setText (Html.fromHtml (bodyData)) ist nach API 24 veraltet . Jetzt müssen Sie Folgendes tun:
quelle
Schauen Sie sich das an: https://stackoverflow.com/a/8558249/450148
Es ist auch ziemlich gut !!
Es funktioniert nur für wenige Tags.
quelle
Wenn Sie es über XML ohne Änderungen im Java-Code konfigurieren möchten, ist diese Idee möglicherweise hilfreich. Sie rufen einfach init vom Konstruktor auf und legen den Text als HTML fest
xml:
quelle
Wenn Sie versuchen, HTML von einer Zeichenfolgenressourcen-ID anzuzeigen, wird die Formatierung möglicherweise nicht auf dem Bildschirm angezeigt. Wenn Ihnen dies passiert, versuchen Sie stattdessen, CDATA-Tags zu verwenden:
...
Siehe diesen Beitrag für weitere Details.
quelle
Der folgende Code ergab das beste Ergebnis für mich.
quelle
quelle
Wenn Sie nur HTML-Text anzeigen möchten und keinen wirklich benötigen
TextView
, nehmen Sie einenWebView
und verwenden Sie ihn wie folgt:Dies beschränkt Sie auch nicht auf einige HTML-Tags.
quelle
layout_height="wrap_content"
. Sie müssen stattdessen eine explizite Höhe oder match_parent festlegen.Der beste Ansatz, um CData-Abschnitte für die Zeichenfolge in der Datei strings.xml zu verwenden, um eine tatsächliche Anzeige des HTML-Inhalts in der Textansicht zu erhalten. Das folgende Codefragment gibt Ihnen eine gute Vorstellung.
Der CData-Abschnitt im Zeichenfolgentext behält die HTML-Tag-Daten auch nach dem Formatieren von Text mit der String.format-Methode bei. Html.fromHtml (str) funktioniert also einwandfrei und Sie sehen den fetten Text in der Begrüßungsnachricht.
Ausgabe:
quelle
Es ist erwähnenswert, dass die Methode Html.fromHtml (String-Quelle) ab API-Ebene 24 veraltet ist. Wenn dies Ihre Ziel-API ist, sollten Sie stattdessen Html.fromHtml (String-Quelle, int-Flags) verwenden.
quelle
Ich möchte auch folgendes Projekt vorschlagen: https://github.com/NightWhistler/HtmlSpanner
Die Verwendung entspricht fast der des Standard-Android-Konverters:
Ich habe es gefunden, nachdem ich bereits mit der eigenen Implementierung von HTML in einen spannbaren Konverter begonnen habe, da Standard-HTML.fromHtml nicht genügend Flexibilität hinsichtlich der Rendersteuerung bietet und sogar keine Möglichkeit bietet, benutzerdefinierte Schriftarten von ttf zu verwenden
quelle
Ich weiß, dass diese Frage alt ist. Andere Antworten hier schlagen
Html.fromHtml()
Methode vor. Ich empfehle Ihnen,HtmlCompat.fromHtml()
ausandroidx.core.text.HtmlCompat
Paket zu verwenden. Da dies eine abwärtskompatible Version derHtml
Klasse ist.Beispielcode:
Auf diese Weise können Sie die Überprüfung der Android-API-Version vermeiden und sie ist einfach zu verwenden (einzeilige Lösung).
quelle
Einfache Verwendung
Html.fromHtml("html string")
. Das wird funktionieren. Wenn die Zeichenfolge Tags wie enthält, werden<h1>
Leerzeichen eingefügt. Aber wir können diese Räume nicht beseitigen. Wenn Sie die Leerzeichen dennoch entfernen möchten, können Sie die Tags in der Zeichenfolge entfernen und die Zeichenfolge dann an die Methode übergebenHtml.fromHtml("html string");
. Auch im Allgemeinen stammen diese Zeichenfolgen vom Server (dynamisch), aber nicht oft, wenn es besser ist, die Zeichenfolge an die Methode zu übergeben, als zu versuchen, die Tags aus der Zeichenfolge zu entfernen.quelle
quelle
Erstellen Sie eine globale Methode wie:
Sie können es auch in Ihrer Aktivität / Ihrem Fragment verwenden, wie:
quelle
Ich habe dies mit der Webansicht implementiert. In meinem Fall muss ich das Bild von der URL zusammen mit dem Text in der Textansicht laden und das funktioniert für mich.
quelle
Es wurde durch verschiedene Antworten vorgeschlagen, die hier vorgeschlagene HTML- Framework-Klasse zu verwenden , aber leider hat diese Klasse in verschiedenen Versionen von Android und verschiedenen nicht behobenen Fehlern ein unterschiedliches Verhalten, wie in den Ausgaben 214637 , 14778 , 235128 und 75953 gezeigt .
Daher möchten Sie möglicherweise eine Kompatibilitätsbibliothek verwenden, um die HTML-Klasse für alle Android-Versionen zu standardisieren und zurück zu portieren. Diese enthält weitere Rückrufe für Elemente und das Design:
Obwohl es der HTML-Klasse des Frameworks ähnelt, waren einige Signaturänderungen erforderlich, um mehr Rückrufe zu ermöglichen. Hier ist das Beispiel von der GitHub-Seite:
quelle
Wenn Sie eine benutzerdefinierte Textansicht schreiben, wird die grundlegende HTML-Set-Textfunktion von einigen Geräten ausgeblendet.
Wir müssen also die folgenden zusätzlichen Schritte ausführen, damit es funktioniert
quelle
Aktualisierung der Antwort oben
quelle
Verwenden Sie den folgenden Code, um die Lösung zu erhalten:
Gebrauchsmethode
quelle
Erstellt Kotlin- Erweiterungen zum Konvertieren von HTML aus String -
quelle
Darf ich eine etwas hackige, aber immer noch geniale Lösung vorschlagen! Ich habe die Idee aus diesem Artikel und habe sie für Android angepasst. Grundsätzlich verwenden Sie a
WebView
und fügen den HTML-Code, den Sie anzeigen und bearbeiten möchten, in ein bearbeitbares div-Tag ein. Auf diese Weise wird beim Tippen aufWebView
die Tastatur die Tastatur angezeigt und die Bearbeitung ermöglicht. Sie fügen einfach etwas JavaScript hinzu, um das bearbeitete HTML und voila zurück zu bekommen!Hier ist der Code:
Und hier ist die Komponente als Kern.
Hinweis: Ich habe den Rückruf zur Höhenänderung von der ursprünglichen Lösung nicht benötigt, daher fehlt dieser hier, aber Sie können ihn bei Bedarf einfach hinzufügen.
quelle
Wenn Sie
androidx.
in Ihrem Projekt * Klassen verwenden, sollten Sie diese verwendenHtmlCompat.fromHtml(text, flag)
. Quelle der Methode ist:@NonNull public static Spanned fromHtml(@NonNull String source, @FromHtmlFlags int flags) { if (Build.VERSION.SDK_INT >= 24) { return Html.fromHtml(source, flags); } //noinspection deprecation return Html.fromHtml(source); }
Es ist besser als Html.fromHtml, da weniger Code, nur eine Zeile und die empfohlene Verwendung vorhanden sind.
quelle
Sie können die einfache Kotlin-Erweiterungsfunktion wie folgt verwenden:
Und Verwendung:
quelle
Verwenden Sie einfach:
quelle