Tag Daftar Html tidak berfungsi di TextView android. Ini adalah konten string saya:
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>";
Saya memuatnya dalam tampilan teks seperti ini:
textview.setText(Html.fromHtml(str));
Outputnya terlihat seperti paragraf. Apa yang dapat saya? Apakah ada solusi untuk itu?
Edit:
webview.loadData(str,"text/html","utf-8");
Jawaban:
Seperti yang Anda lihat di
Html
kode sumber kelas ,Html.fromHtml(String)
tidak mendukung semua tag HTML. Dalam kasus ini,<ul>
dan<li>
tidak didukung.Dari kode sumber saya telah membuat daftar tag HTML yang diizinkan:
br
p
div
em
b
strong
cite
dfn
i
big
small
font
blockquote
tt
monospace
a
u
sup
sub
Jadi sebaiknya Anda menggunakan
WebView
danloadDataWithBaseURL
metodenya. Coba sesuatu seperti ini:sumber
Saya mengalami masalah yang sama, yang saya lakukan adalah mengganti TagHandler default . Yang ini berhasil untuk saya.
dan untuk menampilkan teks ...
[Sunting]
Kuitsi juga memposting perpustakaan yang sangat bagus yang melakukan hal yang sama, mendapatkannya dari tautan SO ini .
sumber
Proyek sampel lengkap ada di https://bitbucket.org/Kuitsi/android-textview-html-list .
Contoh gambar tersedia di https://kuitsi.bitbucket.io/stackoverflow3150400_screen.png
Solusi ini paling mendekati jawaban Masha . Beberapa kode juga diambil dari kelas dalam
android.text.Html.HtmlToSpannedConverter
. Ini mendukung daftar tersusun dan tidak berurutan tetapi teks yang terlalu panjang dalam daftar berurutan masih selaras dengan nomor item daripada teks. Daftar campuran (ol dan ul) juga perlu diperbaiki. Proyek contoh berisi implementasi Html.TagHandler yang diteruskan ke Html.fromHtml (String, ImageGetter, TagHandler) .Edit: Untuk dukungan tag HTML yang lebih luas, https://github.com/NightWhistler/HtmlSpanner mungkin juga patut untuk dicoba.sumber
output.length() > 0
seperti dalamif (output.length() > 0 && output.charAt(output.length() - 1) != '\n')
Perbaikan kecil untuk kode Aman Guatam. Fungsi di atas bermasalah dalam merender karakter baris baru. Misalnya: jika sebelum
<li>
tag adalah<p>
tag, 2 karakter baris baru dirender. Ini kode yang ditingkatkan:sumber
PERINGATAN
per 10 Feb 2016
android.text.Html
sebenarnya mendukungli
dan memberiul
tag dan menggunakan dasarnew BulletSpan()
, yang berarti di versi terbaru Android,Html.TagHandler
solusi yang diposting di sini akan diabaikanpastikan kode Anda menangani perubahan ini jika Anda mengharapkan BulletSpan dengan celah yang lebih besar dari default, Anda harus memiliki semacam solusi yang melakukan pencarian / penggantian span
sumber
N
dan di atasnya.Solusi berbeda menggunakan LeadingMarginSpan. Menangani daftar yang tertata dan tidak berurutan serta bersarang.
sumber
output.setSpan(...)
crash denganjava.lang.RuntimeException: PARAGRAPH span must start at paragraph boundary
Jika Anda hanya perlu memformat daftar, buatlah tetap sederhana dan salin / tempel karakter unicode di TextView Anda untuk mendapatkan hasil yang sama.
• Karakter Unicode 'BULLET' (U + 2022)
sumber
Saya datang ke sini mencari implementasi TagHandler. Baik jawaban Truong Nguyen dan Aman Guatam sangat bagus, tetapi saya membutuhkan versi campuran keduanya: Saya membutuhkan solusi saya untuk tidak memformatnya secara berlebihan dan untuk dapat memecahkan ulang
<ol>
tag, karena saya mengurai sesuatu seperti<h3>title</h3><ol><li>item</li><li>item</li><li>item</li></ol>
.Inilah solusi saya.
Perhatikan bahwa, karena kami menyetel ulang nilai indeks setiap kali daftar baru dimulai, ini TIDAK AKAN berfungsi jika Anda menyusun daftar seperti di
<ol><li>1<ol><li>1.1</li><li>1.2</li></ol><li>2</li></ol>
Dengan kode itu, Anda akan mendapatkan
1, 1, 2, 3
bukan1, 1, 2, 2
.sumber
Tentu, ada cara untuk menampilkan peluru di Android TextView. Anda dapat mengganti
<li>
tag dengan•
(yang merupakan kode HTML untuk poin).Jika Anda ingin mencoba ikon daftar lainnya, gunakan ikon yang disukai dari tabel adalah tautan ini;
http://www.ascii-code.com/
sumber
Anda cukup mengganti "li" dengan unicodes
sumber
Jawaban Lord Voldermort adalah titik awal yang baik. Namun saya membutuhkan
ol
tag untuk menampilkan daftar yang dipesan1. 2. 3. ....
alih-alih peluru. Selain itu, tag berlapis memerlukan penanganan khusus agar berfungsi dengan baik.Dalam kode saya, saya telah mempertahankan stack (parentList) untuk melacak dibuka dan ditutup
ul
danol
tag dan juga untuk mengetahui tag terbuka saat ini. Selain itu, alevelWiseCounter
digunakan untuk mempertahankan jumlah yang berbeda dalam kasusol
tag bertingkat .. . .
sumber
Bagaimana dengan kode selanjutnya (berdasarkan tautan ini ):
sumber
Saya punya masalah, bahwa saya selalu mendapat baris kosong setelah daftar dengan solusi @Kuitsis. Saya menambahkan beberapa baris di handleTag () dan sekarang baris kosong hilang:
sumber
Anda bisa menggunakan
Html.TagHandler
. Di bawah ini dapat digunakan untuk kotlindan
sumber
ini adalah penegasan atas apa yang dikatakan kassim. ada fragmentasi. saya menemukan cara menyelesaikan ini. saya harus mengganti nama
<li>
dan ul menjadi tag kustom. begitu:kemudian di handler saya, saya bisa mencari customTag itu (yang tidak melakukan apa-apa) dan membuatnya melakukan sesuatu.
ini harus membuatnya bekerja untuk semua versi android.
sumber