Кроме того, в зависимости от того, как вы используете строку ресурса, вам может потребоваться поместить теги полужирным / курсивным шрифтом в блок CDATA, чтобы они не анализировались до тех пор, пока не будут использованы Html.fromHtml(): ... <![CDATA[<b><i>so</i></b>]]>...
dule
133
Для всех, кто нашел официальную документацию Android слишком расплывчатой по этому поводу: если вы используете теги, такие как <b> в своем строковом ресурсе, убедитесь, что вы getText(R.string.whatever)getString(R.string.whatever)
получили
1
это не должно быть nameвместо id?
Хендра Анггриан,
4
Так что нет необходимости в Html.fromHtmlили Spannable. Просто используйте, getText(R.string.whatever)как упомянуто @andygeers.
Alaa M.
1
@andygeers Что мы можем сделать для такой строки, как «Меня зовут <b>% s </b>», в которой нельзя использовать getText, поскольку она принимает только один параметр?
Тейлор
45
Используйте тег html внутри строковых ресурсов: -
<resources><stringname="string_resource_name"><![CDATA[<b> Your text </b>]]> </string></resources>
И получите жирный текст из строковых ресурсов, например: -
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));
это лучший ответ, и он полностью работает для людей, которые используют @BindingAdapter. Спасибо брат.
Sup.Ia
44
Как сказал Дэвид Олссон, вы можете использовать HTML в своих строковых ресурсах:
<resource><stringname="my_string">A string with <i>actual</i><b>formatting</b>!</string></resources>
Затем, если вы используете, getText(R.string.my_string)а не getString(R.string.my_string)возвращаетесь, CharSequenceа не, Stringкоторый содержит встроенное форматирование.
Что, если ваша строка - это количество, к которому вам нужно добавить число?
Тейлор
getText не позволяет использовать заполнители
Vincent_Paing
11
В kotlin вы можете создавать функции расширений для ресурсов (действия | фрагменты | контекст), которые преобразуют вашу строку в диапазон html.
например
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)}
использование
//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")
ИЗМЕНИТЬ еще больше расширений
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 какой-нибудь фрагмент поможет. Вы используете его в классе котлина?
svkaka
1
Расширения Activity не нужны, Activity - это сам контекст
Фаршад Тахмасби
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>
Вы должны использовать собственные функции для передачи параметров. Просто поместите "% 1 $ s" вместо "{1}" и вызовите getString (R.string.message, "5.21") без replace ()
Ответы:
В основном вы можете использовать теги html в своем строковом ресурсе, например:
И используйте Html.fromHtml или используйте spannable, проверьте ссылку, которую я опубликовал.
Старый аналогичный вопрос: возможно ли иметь несколько стилей внутри TextView?
источник
Html.fromHtml()
: ...<![CDATA[<b><i>so</i></b>]]>
...getText(R.string.whatever)
getString(R.string.whatever)
name
вместоid
?Html.fromHtml
илиSpannable
. Просто используйте,getText(R.string.whatever)
как упомянуто @andygeers.Используйте тег html внутри строковых ресурсов: -
И получите жирный текст из строковых ресурсов, например: -
источник
Как сказал Дэвид Олссон, вы можете использовать HTML в своих строковых ресурсах:
Затем, если вы используете,
getText(R.string.my_string)
а неgetString(R.string.my_string)
возвращаетесь,CharSequence
а не,String
который содержит встроенное форматирование.источник
В kotlin вы можете создавать функции расширений для ресурсов (действия | фрагменты | контекст), которые преобразуют вашу строку в диапазон html.
например
использование
ИЗМЕНИТЬ еще больше расширений
источник
Strings.xml
Установить
источник
Вы можете сделать это из строки
и может получить к нему доступ из кода Java, например
источник
strings.xml
page.java
Эта цена 5.21 USD
источник