Saya punya HTML sederhana :
<h2>Title</h2><br>
<p>description here</p>
Saya ingin menampilkan teks dengan gaya HTML TextView
. Bagaimana cara melakukannya?
android
html
xml-parsing
textview
UMAR
sumber
sumber
Jawaban:
Anda harus menggunakan
Html.fromHtml()
untuk menggunakan HTML di XML Strings Anda. Cukup mereferensikan sebuah String dengan HTML di layout Anda XML tidak akan berfungsi.Inilah yang harus Anda lakukan:
sumber
h2
menurut definisi menciptakan banyak margin di sekitar dirinya sendiri. danp
juga dilengkapi dengan beberapa margin. jika Anda tidak ingin celahnya, Anda mungkin ingin mempertimbangkan untuk menggunakan elemen html lainnya.android.text.Html.fromHtml
. Saya tahu sebagian besar IDE akan memperbaikinya untuk Anda tetapi untuk keterbacaan itu lebih baik untuk mengetahui nama paket.setText (Html.fromHtml (bodyData)) tidak digunakan lagi setelah api 24. Sekarang Anda harus melakukan ini:
sumber
Lihat ini: https://stackoverflow.com/a/8558249/450148
Cukup bagus juga !!
Ini hanya berfungsi untuk beberapa tag.
sumber
Jika Anda ingin dapat mengkonfigurasinya melalui xml tanpa ada modifikasi dalam kode java Anda mungkin menemukan ide ini bermanfaat. Cukup Anda memanggil init dari konstruktor dan mengatur teks sebagai html
xml:
sumber
Jika Anda mencoba menampilkan HTML dari id sumber daya string, pemformatan mungkin tidak muncul di layar. Jika itu terjadi pada Anda, coba gunakan tag CDATA sebagai gantinya:
...
Lihat posting ini untuk detail lebih lanjut.
sumber
Kode di bawah ini memberikan hasil terbaik untuk saya.
sumber
sumber
Jika Anda hanya ingin menampilkan beberapa teks html dan tidak benar-benar membutuhkan
TextView
, maka ambilWebView
dan gunakan seperti berikut:Ini tidak membatasi Anda untuk beberapa tag html juga.
sumber
layout_height="wrap_content"
. Anda harus menetapkan tinggi eksplisit atau match_parent sebagai gantinya.Pendekatan terbaik untuk menggunakan bagian CData untuk string dalam file strings.xml untuk mendapatkan tampilan aktual dari konten html ke TextView potongan kode di bawah ini akan memberi Anda ide yang adil.
Bagian CData dalam teks string menjaga data tag html tetap utuh bahkan setelah memformat teks menggunakan metode String.format. Jadi, Html.fromHtml (str) berfungsi dengan baik dan Anda akan melihat teks tebal di pesan Selamat Datang.
Keluaran:
sumber
Perlu disebutkan bahwa metode Html.fromHtml (Sumber string) sudah tidak digunakan lagi sejak level API 24. Jika itu API target Anda, Anda harus menggunakan Html.fromHtml (Sumber string, int flag) sebagai gantinya.
sumber
Saya juga ingin menyarankan proyek berikut: https://github.com/NightWhistler/HtmlSpanner
Penggunaannya hampir sama dengan konverter android default:
Menemukannya setelah saya sudah mulai dengan implementasi sendiri html ke spannable converter, karena standar Html.fromHtml tidak memberikan fleksibilitas yang cukup atas kontrol rendering dan bahkan tidak ada kemungkinan untuk menggunakan font khusus dari ttf
sumber
Saya tahu pertanyaan ini sudah tua. Jawaban lain di sini menyarankan
Html.fromHtml()
metode. Saya sarankan Anda untuk menggunakanHtmlCompat.fromHtml()
dariandroidx.core.text.HtmlCompat
paket. Karena ini adalah versi yang kompatibel ke belakangHtml
kelas yang .Kode sampel:
Dengan cara ini Anda dapat menghindari pemeriksaan versi Android API dan mudah digunakan (solusi single line).
sumber
Penggunaan sederhana
Html.fromHtml("html string")
. Ini akan bekerja Jika string memiliki tag seperti<h1>
maka spasi akan datang. Tapi kita tidak bisa menghilangkan ruang itu. Jika Anda masih ingin menghapus spasi, maka Anda dapat menghapus tag di string dan kemudian meneruskan string ke metodeHtml.fromHtml("html string");
. Juga umumnya string ini berasal dari server (dinamis) tetapi tidak sering, jika ini adalah kasus yang lebih baik untuk meneruskan string seperti metode, daripada mencoba untuk menghapus tag dari string.sumber
sumber
Buat metode global seperti:
Anda juga dapat menggunakannya di Aktivitas / Fragmen Anda seperti:
sumber
Saya telah menerapkan ini menggunakan tampilan web. Dalam kasus saya, saya harus memuat gambar dari URL bersama dengan teks dalam tampilan teks dan ini berfungsi untuk saya.
sumber
Telah disarankan melalui berbagai jawaban untuk menggunakan kelas kerangka kerja Html seperti yang disarankan di sini, tetapi sayangnya kelas ini memiliki perilaku yang berbeda di berbagai versi Android dan berbagai bug yang belum diperbaiki , seperti yang ditunjukkan dalam edisi 214637 , 14778 , 235128 , dan 75953 .
Karena itu, Anda mungkin ingin menggunakan pustaka kompatibilitas untuk menstandarkan dan mendukung kelas Html di versi Android yang mencakup lebih banyak panggilan balik untuk elemen dan gaya:
Meskipun mirip dengan kelas Html framework, beberapa perubahan tanda tangan diperlukan untuk memungkinkan lebih banyak panggilan balik. Berikut contoh dari halaman GitHub:
sumber
Setiap kali Anda menulis tampilan teks kustom fitur HTML set teks dasar akan hilang dari beberapa perangkat.
Jadi kita perlu melakukan langkah-langkah tambahan berikut agar berfungsi
sumber
pembaruan jawaban di atas
sumber
Gunakan kode di bawah ini untuk mendapatkan solusinya:
Metode Utitilty
sumber
Membuat ekstensi Kotlin untuk mengonversi html dari String -
sumber
Bolehkah saya menyarankan solusi yang agak aneh tapi tetap jenius! Saya mendapat ide dari artikel ini dan mengadaptasinya untuk Android. Pada dasarnya Anda menggunakan
WebView
dan memasukkan HTML yang ingin Anda tampilkan dan edit dalam tag div yang dapat diedit. Dengan cara ini saat pengguna mengetuk tombolWebView
keyboard muncul dan memungkinkan pengeditan. Mereka Anda baru saja menambahkan beberapa JavaScript untuk mendapatkan kembali HTML dan voila yang diedit!Ini kodenya:
Dan di sini adalah komponen sebagai Intisari.
Catatan: Saya tidak memerlukan panggilan balik perubahan tinggi dari solusi asli sehingga tidak ada di sini tetapi Anda dapat dengan mudah menambahkannya jika diperlukan.
sumber
Jika Anda menggunakan
androidx.
* kelas dalam proyek Anda, Anda harus menggunakanHtmlCompat.fromHtml(text, flag)
. Sumber metode adalah:@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); }
Ini adalah cara yang lebih baik daripada Html.fromHtml karena ada lebih sedikit kode, hanya satu baris, dan cara yang disarankan untuk menggunakannya.
sumber
Anda dapat menggunakan fungsi ekstensi Kotlin sederhana seperti ini:
Dan penggunaan:
sumber
Cukup gunakan:
sumber