Saya memiliki beberapa string tetap di dalam saya strings.xml
, sesuatu seperti:
<resources>
<string name="somestring">
<B>Title</B><BR/>
Content
</string>
</resources>
dan dalam tata letak saya, saya punya TextView
yang ingin saya isi dengan string berformat html.
<TextView android:id="@+id/formattedtext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/htmlstring"/>
jika saya melakukan ini, konten formattedtext
hanya konten yang somestring
dilucuti dari tag html dan dengan demikian tidak diformat.
Saya tahu bahwa adalah mungkin untuk mengatur teks yang diformat secara terprogram dengan
.setText(Html.fromHtml(somestring));
karena saya menggunakan ini di bagian lain dari program saya di mana ia berfungsi seperti yang diharapkan.
Untuk memanggil fungsi ini saya memerlukan Activity
, tetapi pada saat ini tata letak saya hanya tampilan statis yang kurang lebih sederhana dalam XML polos dan saya lebih suka membiarkannya seperti itu, untuk menyelamatkan saya dari overhead pembuatan Activity
hanya untuk mengatur beberapa teks.
Apakah saya mengabaikan sesuatu yang sudah jelas? Apakah itu tidak mungkin sama sekali? Selamat datang bantuan atau pemecahan masalah!
Sunting: Baru saja mencoba beberapa hal dan sepertinya format HTML di xml memiliki beberapa batasan:
tag harus ditulis dengan huruf kecil
beberapa tag yang disebutkan di sini tidak berfungsi, misalnya
<br/>
(dimungkinkan untuk digunakan\n
sebagai gantinya)
sumber
Jawaban:
Kalau-kalau ada yang menemukan ini, ada alternatif yang lebih baik yang tidak didokumentasikan (saya tersandung setelah mencari berjam-jam, dan akhirnya menemukannya di daftar bug untuk Android SDK itu sendiri). Anda BISA menyertakan HTML mentah di strings.xml, selama Anda membungkusnya
Contoh:
Kemudian, dalam kode Anda:
IMHO, ini beberapa urutan besarnya lebih baik untuk bekerja dengan :-)
sumber
Html.fromHtml(getString(R.string.nice_html))
sedikit? :)Karena jawaban teratas di sini adalah menyarankan sesuatu yang salah (atau setidaknya terlalu rumit), saya merasa ini harus diperbarui, walaupun pertanyaannya sudah cukup lama:
Saat menggunakan sumber daya String di Android, Anda hanya perlu menelepon
getString(...)
dari kode Java atau menggunakanandroid:text="@string/..."
XML layout Anda.Bahkan jika Anda ingin menggunakan markup HTML di Strings Anda, Anda tidak perlu banyak berubah:
Satu-satunya karakter yang Anda butuhkan untuk melarikan diri dalam sumber daya String Anda adalah:
"
menjadi\"
'
menjadi\'
&
menjadi&
atau&
Itu berarti Anda dapat menambahkan markup HTML Anda tanpa keluar dari tag:
Namun, yang pasti, Anda hanya boleh menggunakan
<b>
,<i>
dan<u>
seperti yang tercantum dalam dokumentasi.Jika Anda ingin menggunakan string HTML Anda dari XML , teruslah menggunakannya
android:text="@string/..."
, itu akan berfungsi dengan baik.Satu-satunya perbedaan adalah bahwa, jika Anda ingin menggunakan string HTML Anda dari kode Java , Anda harus menggunakan
getText(...)
bukangetString(...)
sekarang, karena yang pertama mempertahankan gaya dan yang terakhir hanya akan menghapusnya.Semudah itu. Tidak ada CDATA, tidak
Html.fromHtml(...)
.Anda hanya akan perlu
Html.fromHtml(...)
jika Anda melakukan encode karakter khusus Anda di HTML markup. Gunakan dengangetString(...)
itu. Ini bisa diperlukan jika Anda ingin meneruskan StringString.format(...)
.Ini semua dijelaskan dalam dokumen juga.
Edit:
Tidak ada perbedaan antara
getText(...)
dengan HTML yang tidak terhapus (seperti yang saya usulkan) atauCDATA
bagian danHtml.fromHtml(...)
.Lihat gambar berikut untuk perbandingan:
sumber
getResources().getText(R.string.codename)
<b>
,<i>
,<u>
. Tag lain tidak selalu didukung.Lepaskan tag HTML Anda ...
sumber
TextView
menampilkan HTML?fromHTML()
.Html.fromHTML()
Anda harus menyandikan karakter khusus. Aneh!Android tidak memiliki spesifikasi untuk menunjukkan jenis string sumber daya (mis. Teks / polos atau teks / html). Ada solusi, namun, yang akan memungkinkan pengembang untuk menentukan ini dalam file XML.
Setelah Anda menentukan ini, Anda dapat mengekspresikan diri dengan HTML dalam file xml tanpa harus memanggil setText (Html.fromHtml (...)) lagi. Saya agak terkejut bahwa pendekatan ini bukan bagian dari API.
Solusi ini berfungsi sampai-sampai simulator Android studio akan menampilkan teks sebagai HTML yang dirender.
res / values / strings.xml (sumber string sebagai HTML)
layout.xml (hanya bagian yang relevan)
Nyatakan namespace atribut khusus, dan tambahkan atribut android_ex: isHtml. Juga gunakan subkelas dari TextView.
res / values / attrs.xml (tentukan atribut khusus untuk subkelas)
TextViewEx.java (subclass dari TextView)
sumber
Pembaruan terbaru:
Html.fromHtml(string);
// dihentikan setelah versi Android N ..Kode berikut memberikan dukungan untuk Android N dan versi di atas ...
sumber
sumber
Saya memiliki kasus lain ketika saya tidak memiliki kesempatan untuk memasukkan CDATA ke xml karena saya menerima string HTML dari server.
Inilah yang saya dapatkan dari server:
Tampaknya lebih rumit tetapi solusinya jauh lebih sederhana.
Semoga ini bisa membantu!
Linh
sumber