HTML List Tag funktioniert nicht in Android TextView. Dies ist mein String-Inhalt:
String str="A dressy take on classic gingham in a soft, textured weave of stripes that resembles twill. Take a closer look at this one.<ul><li>Trim, tailored fit for a bespoke feel</li><li>Medium spread collar, one-button mitered barrel cuffs</li><li>Applied placket with genuine mother-of-pearl buttons</li><li>;Split back yoke, rear side pleats</li><li>Made in the U.S.A. of 100% imported cotton.</li></ul>";
Ich habe es in einer Textansicht wie folgt geladen:
textview.setText(Html.fromHtml(str));
Die Ausgabe sieht aus wie ein Absatz. Was kann ich tun? Gibt es eine Lösung dafür?
Bearbeiten:
webview.loadData(str,"text/html","utf-8");
Antworten:
Wie Sie in der sehen
Html
Klasse Quellcode ,Html.fromHtml(String)
unterstützt nicht alle HTML - Tags. In diesem Fall<ul>
und<li>
werden nicht unterstützt.Aus dem Quellcode habe ich eine Liste der zulässigen HTML-Tags erstellt:
br
p
div
em
b
strong
cite
dfn
i
big
small
font
blockquote
tt
monospace
a
u
sup
sub
Also besser nutzen
WebView
und seineloadDataWithBaseURL
Methode. Versuchen Sie so etwas:quelle
Ich habe das gleiche Problem. Ich habe den Standard- TagHandler überschrieben . Dieser hat für mich gearbeitet.
und zum Anzeigen des Textes ...
[Bearbeiten]
Kuitsi hat auch eine wirklich gute Bibliothek gepostet , die das Gleiche tut und diese über diesen SO-Link erhalten hat .
quelle
Das vollständige Beispielprojekt finden Sie unter https://bitbucket.org/Kuitsi/android-textview-html-list .
Ein Beispielbild finden Sie unter https://kuitsi.bitbucket.io/stackoverflow3150400_screen.png
Diese Lösung kommt der Antwort von Mascha am nächsten . Ein Teil des Codes stammt auch aus der inneren Klasse
android.text.Html.HtmlToSpannedConverter
. Es unterstützt verschachtelte geordnete und ungeordnete Listen, aber zu lange Texte in geordneten Listen werden weiterhin an der Artikelnummer und nicht am Text ausgerichtet. Gemischte Listen (ol und ul) benötigen ebenfalls einige Arbeit. Das Beispielprojekt enthält die Implementierung von Html.TagHandler, die an Html.fromHtml (String, ImageGetter, TagHandler) übergeben wird .Bearbeiten: Für eine umfassendere Unterstützung von HTML-Tags ist möglicherweise auch https://github.com/NightWhistler/HtmlSpanner einen Versuch wert.quelle
output.length() > 0
if (output.length() > 0 && output.charAt(output.length() - 1) != '\n')
Eine kleine Korrektur des Aman Guatam-Codes. Die obige Funktion hat ein Problem beim Rendern von Zeilenumbrüchen. Beispiel: Wenn vor dem
<li>
Tag ein<p>
Tag ist, werden 2 Zeilenumbruchzeichen gerendert. Hier ist aktualisierter Code:quelle
WARNUNG
Ab dem 10. Februar 2016 werden
android.text.Html
tatsächlich grundlegende Funktionen unterstütztli
undul
markiert und verwendet. Diesnew BulletSpan()
bedeutet, dass in den neuesten Versionen von Android die hier veröffentlichtenHtml.TagHandler
Lösungen ignoriert werdenStellen Sie sicher, dass Ihr Code diese Änderung behandelt, falls Sie ein BulletSpan mit einer größeren Lücke als der Standardeinstellung erwarten. Sie müssen über eine Lösung verfügen, die das Suchen / Ersetzen der Bereiche ermöglicht
quelle
N
und höher verfügbar .Andere Lösung mit LeadingMarginSpan. Behandelt geordnete und ungeordnete Listen sowie das Verschachteln.
quelle
output.setSpan(...)
java.lang.RuntimeException: PARAGRAPH span must start at paragraph boundary
Wenn Sie nur eine Liste formatieren müssen, halten Sie sie einfach und kopieren Sie ein Unicode-Zeichen in Ihre Textansicht, um das gleiche Ergebnis zu erzielen.
• Unicode-Zeichen 'BULLET' (U + 2022)
quelle
Ich bin hierher gekommen, um nach TagHandler-Implementierungen zu suchen. Die Antworten von Truong Nguyen und Aman Guatam sind sehr nett, aber ich brauchte eine gemischte Version von beiden: Ich brauchte meine Lösung, um sie nicht zu überformatieren und
<ol>
Tags neu auflösen zu können , da ich so etwas analysiere<h3>title</h3><ol><li>item</li><li>item</li><li>item</li></ol>
.Hier ist meine Lösung.
Da wir den Indexwert bei jedem Start einer neuen Liste zurücksetzen, funktioniert dies NICHT, wenn Sie Listen wie in verschachteln
<ol><li>1<ol><li>1.1</li><li>1.2</li></ol><li>2</li></ol>
Mit diesem Code würden Sie
1, 1, 2, 3
stattdessen bekommen1, 1, 2, 2
.quelle
Sicher, es gibt eine Möglichkeit, Aufzählungszeichen in Android TextView anzuzeigen. Sie können
<li>
Tags durch ersetzen•
(dies ist HTML-Code für Aufzählungszeichen).Wenn Sie andere Listensymbole ausprobieren möchten, verwenden Sie diesen Link aus der Tabelle.
http://www.ascii-code.com/
quelle
Sie können das "li" einfach durch Unicodes ersetzen
quelle
Lord Voldermorts Antwort ist ein guter Ausgangspunkt. Ich benötigte jedoch ein
ol
Tag, um die geordnete Liste1. 2. 3. ....
anstelle von Aufzählungszeichen anzuzeigen . Außerdem benötigen verschachtelte Tags eine spezielle Behandlung, um ordnungsgemäß zu funktionieren.In meinem Code habe ich beibehalten Stapel (parentList) Spur geöffnet und geschlossen zu halten
ul
undol
Tags und auch den aktuellen offenen Tag kennen. Außerdem wird alevelWiseCounter
verwendet, um bei verschachteltenol
Tags unterschiedliche Zählwerte beizubehalten .. . .
quelle
Wie wäre es mit dem nächsten Code (basierend auf diesem Link ):
quelle
Ich hatte das Problem, dass ich nach einer Liste mit @ Kuitsis-Lösung immer eine leere Zeile bekam. Ich habe ein paar Zeilen in handleTag () hinzugefügt und jetzt sind die leeren Zeilen weg:
quelle
Sie können verwenden
Html.TagHandler
. Unten kann für Kotlin verwendet werdenund
quelle
Dies ist eine Bestätigung dessen, was Kasim gesagt hat. es gibt Fragmentierung. Ich fand, wie man das löst. Ich muss umbenennen
<li>
und ul zu einem benutzerdefinierten Tag. so:dann kann ich in meinem Handler nach diesem customTag suchen (der nichts tut) und ihn dazu bringen, etwas zu tun.
Dies sollte es für alle Versionen von Android funktionieren.
quelle