Selain itu, tergantung bagaimana Anda menggunakan string sumber daya, Anda mungkin perlu meletakkan tag tebal / miring di blok CDATA sehingga tidak dapat diurai sampai digunakan oleh Html.fromHtml(): ... <![CDATA[<b><i>so</i></b>]]>...
dule
133
Bagi siapa pun yang merasa dokumentasi resmi Android agak terlalu kabur tentang ini: jika Anda menggunakan tag seperti <b> dalam sumber daya string Anda, pastikan Anda mengambilnya menggunakan getText(R.string.whatever)daripadagetString(R.string.whatever)
andygeers
1
bukankah itu seharusnya menjadi namegantinya id?
Hendra Anggrian
4
Jadi tidak perlu Html.fromHtmlatau Spannable. Gunakan saja getText(R.string.whatever)seperti yang disebutkan @andygeers.
Alaa M.
1
@andygeers Apa yang dapat kita lakukan untuk string seperti "Nama saya <b>% s </b>" yang tidak dapat menggunakan getText karena hanya menerima satu parameter?
Taylor
45
Gunakan tag html di dalam sumber daya string: -
<resources><stringname="string_resource_name"><![CDATA[<b> Your text </b>]]> </string></resources>
Dan dapatkan teks tebal dari sumber string seperti: -
privateSpanned getSpannedText(String text){if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.N){returnHtml.fromHtml(text,Html.FROM_HTML_MODE_COMPACT);}else{returnHtml.fromHtml(text);}}String s = format(context.getResources().getString(R.string.string_resource_name));
textView.setText(getSpannedText(s));
ini adalah jawaban terbaik dan berfungsi sepenuhnya untuk orang-orang yang menggunakan @BindingAdapter. Terima kasih saudara.
Sup. Ia
44
Seperti yang dikatakan David Olsson, Anda dapat menggunakan HTML di sumber daya string Anda:
<resource><stringname="my_string">A string with <i>actual</i><b>formatting</b>!</string></resources>
Kemudian jika Anda menggunakan getText(R.string.my_string)daripada getString(R.string.my_string)Anda mendapatkan kembali CharSequencedaripada Stringyang berisi format yang disematkan.
getText mengembalikan CharSequence bukan Spannable
Tigran Babajanyan
1
Bagaimana jika string Anda adalah kuantitas yang perlu Anda tambahkan angka?
Taylor
getText tidak mengizinkan Anda menggunakan placeholder
Vincent_Paing
11
Di kotlin, Anda dapat membuat fungsi ekstensi pada sumber daya (aktivitas | fragmen | konteks) yang akan mengonversi string Anda menjadi span html
misalnya
fun Resources.getHtmlSpannedString(@StringRes id:Int):Spanned= getString(id).toHtmlSpan()
fun Resources.getHtmlSpannedString(@StringRes id:Int, vararg formatArgs:Any):Spanned= getString(id,*formatArgs).toHtmlSpan()
fun Resources.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int):Spanned= getQuantityString(id, quantity).toHtmlSpan()
fun Resources.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int, vararg formatArgs:Any):Spanned= getQuantityString(id, quantity,*formatArgs).toHtmlSpan()
fun String.toHtmlSpan():Spanned=if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.N){Html.fromHtml(this,Html.FROM_HTML_MODE_LEGACY)}else{Html.fromHtml(this)}
Pemakaian
//your strings.xml<string name="greeting"><![CDATA[<b>Hello%s!</b><br>]]>This is newline</string>//in your fragment or activity
resources.getHtmlSpannedString(R.string.greeting,"World")
EDIT lebih banyak ekstensi
fun Context.getHtmlSpannedString(@StringRes id:Int):Spanned= getString(id).toHtmlSpan()
fun Context.getHtmlSpannedString(@StringRes id:Int, vararg formatArgs:Any):Spanned= getString(id,*formatArgs).toHtmlSpan()
fun Context.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int):Spanned= resources.getQuantityString(id, quantity).toHtmlSpan()
fun Context.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int, vararg formatArgs:Any):Spanned= resources.getQuantityString(id, quantity,*formatArgs).toHtmlSpan()
fun Activity.getHtmlSpannedString(@StringRes id:Int):Spanned= getString(id).toHtmlSpan()
fun Activity.getHtmlSpannedString(@StringRes id:Int, vararg formatArgs:Any):Spanned= getString(id,*formatArgs).toHtmlSpan()
fun Activity.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int):Spanned= resources.getQuantityString(id, quantity).toHtmlSpan()
fun Activity.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int, vararg formatArgs:Any):Spanned= resources.getQuantityString(id, quantity,*formatArgs).toHtmlSpan()
fun Fragment.getHtmlSpannedString(@StringRes id:Int):Spanned= getString(id).toHtmlSpan()
fun Fragment.getHtmlSpannedString(@StringRes id:Int, vararg formatArgs:Any):Spanned= getString(id,*formatArgs).toHtmlSpan()
fun Fragment.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int):Spanned= resources.getQuantityString(id, quantity).toHtmlSpan()
fun Fragment.getQuantityHtmlSpannedString(@PluralsRes id:Int, quantity:Int, vararg formatArgs:Any):Spanned= resources.getQuantityString(id, quantity,*formatArgs).toHtmlSpan()
@Himanshu Mori beberapa cuplikan akan membantu. Apakah Anda menggunakannya di kelas kotlin?
svkaka
1
Perluasan aktivitas tidak diperlukan, Aktivitas adalah Konteks itu sendiri
Farshad Tahmasbi
2
Strings.xml
<stringname="my_text"><Data><![CDATA[<b>Well Done !</b><br></br>All of your activities are completed.<br></br>You may now close the app.<br></br>See you again next time.]]></Data></string>
Anda harus menggunakan fungsionalitas asli untuk meneruskan parameter. Cukup tempatkan "% 1 $ s" alih-alih "{1}", dan panggil getString (R.string.message, "5.21") tanpa ganti ()
Jawaban:
Pada dasarnya Anda dapat menggunakan tag html dalam sumber daya string Anda seperti:
Dan gunakan Html.fromHtml atau gunakan spannable, periksa link yang saya posting.
Pertanyaan lama yang serupa: Apakah mungkin memiliki banyak gaya di dalam TextView?
sumber
Html.fromHtml()
: ...<![CDATA[<b><i>so</i></b>]]>
...getText(R.string.whatever)
daripadagetString(R.string.whatever)
name
gantinyaid
?Html.fromHtml
atauSpannable
. Gunakan sajagetText(R.string.whatever)
seperti yang disebutkan @andygeers.Gunakan tag html di dalam sumber daya string: -
Dan dapatkan teks tebal dari sumber string seperti: -
sumber
Seperti yang dikatakan David Olsson, Anda dapat menggunakan HTML di sumber daya string Anda:
Kemudian jika Anda menggunakan
getText(R.string.my_string)
daripadagetString(R.string.my_string)
Anda mendapatkan kembaliCharSequence
daripadaString
yang berisi format yang disematkan.sumber
Di kotlin, Anda dapat membuat fungsi ekstensi pada sumber daya (aktivitas | fragmen | konteks) yang akan mengonversi string Anda menjadi span html
misalnya
Pemakaian
EDIT lebih banyak ekstensi
sumber
Strings.xml
Untuk mengatur
sumber
Anda bisa melakukannya dari string
dan dapat mengaksesnya dari kode java seperti
sumber
strings.xml
page.java
Harga ini 5,21 USD
sumber