Update : Wie @Andy unten erwähnt, hat Google erstellt HtmlCompat
, das anstelle der unten beschriebenen Methode verwendet werden kann. Fügen Sie diese Abhängigkeit implementation 'androidx.core:core:1.0.1
der Datei build.gradle Ihrer App hinzu. Stellen Sie sicher, dass Sie die neueste Version von verwenden androidx.core:core
.
Dies ermöglicht Ihnen Folgendes:
HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY);
Weitere Informationen zu den verschiedenen Flags finden Sie in der HtmlCompat-Dokumentation
ursprüngliche Antwort:
In Android N wurde eine neue Html.fromHtml
Methode eingeführt. Html.fromHtml
Jetzt ist ein zusätzlicher Parameter mit dem Namen flags erforderlich. Dieses Flag gibt Ihnen mehr Kontrolle darüber, wie Ihr HTML angezeigt wird.
Unter Android N und höher sollten Sie diese neue Methode verwenden. Die ältere Methode ist veraltet und wird möglicherweise in zukünftigen Android-Versionen entfernt.
Sie können Ihre eigene Util-Methode erstellen, die die alte Methode bei älteren Versionen und die neuere Methode bei Android N und höher verwendet. Wenn Sie keine Versionsprüfung hinzufügen, wird Ihre App bei niedrigeren Android-Versionen beschädigt. Sie können diese Methode in Ihrer Util-Klasse verwenden.
@SuppressWarnings("deprecation")
public static Spanned fromHtml(String html){
if(html == null){
// return an empty spannable if the html is null
return new SpannableString("");
}else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// FROM_HTML_MODE_LEGACY is the behaviour that was used for versions below android N
// we are using this flag to give a consistent behaviour
return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
} else {
return Html.fromHtml(html);
}
}
Sie können das HTML.FROM_HTML_MODE_LEGACY
in einen zusätzlichen Parameter konvertieren, wenn Sie möchten. Dies gibt Ihnen mehr Kontrolle darüber, welches Flag verwendet werden soll.
Weitere Informationen zu den verschiedenen Flags finden Sie in der Dokumentation zur
HTML-Klasse
Html.FROM_HTML_MODE_LEGACY
//noinspection deprecation
Kommentar direkt unter hinzuzufügenelse
, um Flusenwarnungen zu vermeiden.Ich hatte viele dieser Warnungen und verwende immer FROM_HTML_MODE_LEGACY, also habe ich eine Hilfsklasse namens HtmlCompat erstellt, die Folgendes enthält:
quelle
Vergleichen Sie die Flags von fromHtml ().
quelle
Oder Sie können verwenden
androidx.core.text.HtmlCompat
:HtmlCompat-Dokumente
quelle
Wenn Sie das Glück haben, sich auf Kotlin zu entwickeln, erstellen Sie einfach eine Erweiterungsfunktion:
Und dann ist es so süß, es überall zu benutzen:
quelle
Spanned
undreturn
fromHtml
Sie sollten FROM_HTML_MODE_LEGACY verwenden
Code
Für Kotlin
Anruf
quelle
HtmlCompat.fromHtml("textWithHtmlTags", HtmlCompat.FROM_HTML_MODE_LEGACY)
Aus dem offiziellen Dokument:
https://developer.android.com/reference/android/text/Html.html
quelle
Wenn Sie Kotlin verwenden , habe ich dies mit einer Kotlin-Erweiterung erreicht:
Dann nenne es wie:
quelle
Um die Antwort von @Rockney und @ k2col zu erweitern, kann der verbesserte Code folgendermaßen aussehen:
Wo die
CompatUtils.isApiNonLowerThan
:Der Unterschied besteht darin, dass es keine zusätzliche lokale Variable gibt und die Abschreibung nur in der
else
Verzweigung erfolgt. Dies unterdrückt also nicht alle Methoden außer einem einzelnen Zweig.Es kann hilfreich sein, wenn Google in einigen zukünftigen Versionen von Android entscheidet, selbst die
fromHtml(String source, int flags)
Methode zu verwerfen .quelle
Sie können verwenden
Inspektion nur für einzelne Anweisung, aber nicht für die gesamte Methode zu unterdrücken.
quelle
Die Framework-Klasse wurde so geändert, dass ein Flag zum Informieren erforderlich ist
fromHtml()
zur Verarbeitung von Zeilenumbrüchen zu erhalten. Dies wurde in Nougat hinzugefügt und berührt nur die Herausforderung von Inkompatibilitäten dieser Klasse über Android-Versionen hinweg.Ich habe eine Kompatibilitätsbibliothek veröffentlicht, um die Klasse zu standardisieren und zurück zu portieren und weitere Rückrufe für Elemente und Stil zu enthalten:
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
minSdkVersion 15
undtargetSdkVersion 23
ich einen Build-Fehler für values-v24.xml erhalte :Error:(3) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Borderless.Colored'.
Ihre Bibliothek zielt offensichtlich auf API-Level 25 ab. Wie kann ich es noch benutzen?Hier ist meine Lösung.
quelle
mach einfach eine Funktion:
quelle
Versuchen Sie Folgendes, um grundlegende HTML-Tags einschließlich ul ol li-Tags zu unterstützen. Erstellen Sie einen Tag-Handler wie unten gezeigt
Stellen Sie den Text auf Aktivität wie unten gezeigt ein
Und HTML-Text auf Ressourcen-String-Dateien als
<! [CDATA [... HTML-Rohdaten ...]]>
quelle