pembaruan : seperti @Andy yang disebutkan di bawah ini, Google telah membuat HtmlCompat
yang dapat digunakan sebagai pengganti metode di bawah ini. Tambahkan ketergantungan ini implementation 'androidx.core:core:1.0.1
ke file build.gradle aplikasi Anda. Pastikan Anda menggunakan versi terbaru dari androidx.core:core
.
Ini memungkinkan Anda untuk menggunakan:
HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY);
Anda dapat membaca lebih lanjut tentang berbagai flag pada dokumentasi HtmlCompat
jawaban asli:
Di Android N mereka memperkenalkan Html.fromHtml
metode baru . Html.fromHtml
sekarang membutuhkan parameter tambahan, bernama flag. Bendera ini memberi Anda lebih banyak kontrol tentang bagaimana HTML Anda ditampilkan.
Di Android N dan di atas, Anda harus menggunakan metode baru ini. Metode yang lebih lama tidak digunakan lagi dan dapat dihapus di versi Android yang akan datang.
Anda dapat membuat metode Util Anda sendiri yang akan menggunakan metode lama pada versi yang lebih lama dan metode yang lebih baru di Android N dan di atas. Jika Anda tidak menambahkan versi, periksa aplikasi Anda akan merusak versi Android yang lebih rendah. Anda dapat menggunakan metode ini di kelas Util Anda.
@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);
}
}
Anda dapat mengonversikannya HTML.FROM_HTML_MODE_LEGACY
menjadi parameter tambahan jika Anda mau. Ini memberi Anda lebih banyak kendali tentang bendera mana yang akan digunakan.
Anda dapat membaca lebih lanjut tentang berbagai flag pada
dokumentasi kelas Html
Html.FROM_HTML_MODE_LEGACY
//noinspection deprecation
komentar tepat di bawahelse
untuk menghindari peringatan serat.Saya memiliki banyak peringatan ini dan saya selalu menggunakan FROM_HTML_MODE_LEGACY jadi saya membuat kelas penolong yang disebut HtmlCompat berisi yang berikut:
sumber
Bandingkan dengan flag fromHtml ().
sumber
Atau Anda dapat menggunakan
androidx.core.text.HtmlCompat
:HtmlCompat dokumen
sumber
Jika Anda cukup beruntung untuk berkembang di Kotlin, cukup buat fungsi ekstensi:
Dan sangat manis menggunakannya di mana-mana:
sumber
Spanned
danreturn
dariHtml
Anda harus menggunakan FROM_HTML_MODE_LEGACY
Kode
Untuk Kotlin
Panggilan
sumber
HtmlCompat.fromHtml("textWithHtmlTags", HtmlCompat.FROM_HTML_MODE_LEGACY)
Dari dokumen resmi:
https://developer.android.com/reference/android/text/Html.html
sumber
Jika Anda menggunakan Kotlin , saya mencapai ini dengan menggunakan ekstensi Kotlin:
Kemudian menyebutnya seperti:
sumber
Hanya untuk memperluas jawaban dari @Rockney dan @ k2col kode yang ditingkatkan dapat terlihat seperti:
Dimana
CompatUtils.isApiNonLowerThan
:Perbedaannya adalah bahwa tidak ada variabel lokal tambahan dan penghentian hanya di
else
cabang. Jadi ini tidak akan menekan semua metode kecuali cabang tunggal.Ini dapat membantu ketika Google akan memutuskan dalam beberapa versi Android masa depan untuk mencabut bahkan
fromHtml(String source, int flags)
metodenya.sumber
Kamu bisa memakai
untuk menekan inspeksi hanya untuk satu pernyataan tetapi tidak seluruh metode.
sumber
Kelas kerangka kerja telah dimodifikasi untuk meminta bendera untuk menginformasikan
fromHtml()
cara memproses jeda baris. Ini ditambahkan di Nougat, dan hanya menyentuh pada tantangan ketidakcocokan kelas ini di seluruh versi Android.Saya telah menerbitkan perpustakaan kompatibilitas untuk membakukan dan mendukung kelas dan memasukkan 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
minSdkVersion 15
dantargetSdkVersion 23
saya mendapatkan kesalahan build untuk values-v24.xml :Error:(3) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Borderless.Colored'.
Perpustakaan Anda menargetkan API level 25, jelas. Bagaimana saya masih bisa menggunakannya?Ini solusinya.
sumber
buat saja fungsi:
sumber
Coba yang berikut ini untuk mendukung tag html dasar termasuk tag ul ol li. Buat penangan Tag seperti yang ditunjukkan di bawah ini
Atur teks pada Aktivitas seperti yang ditunjukkan di bawah ini
Dan teks html pada file string sumber daya sebagai
<! [CDATA [... data html mentah ...]]>
sumber