Dav*_*son 153
您基本上可以在字符串资源中使用html标记,如:
<resource>
    <string name="styled_welcome_message">We are <b><i>so</i></b> glad to see you.</string>
</resources>
并使用Html.fromHtml或使用spannable,检查我发布的链接.
旧的类似问题:TextView中是否可以有多个样式?
小智 29
在字符串资源中使用html标签: -
<resources>
<string name="string_resource_name"><![CDATA[<b> Your text </b>]]> </string>
</resources>
并从字符串资源获取粗体文本,如: -
private Spanned getSpannedText(String text) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            return Html.fromHtml(text, Html.FROM_HTML_MODE_COMPACT);
        } else {
            return Html.fromHtml(text);
        }
    }
 String s = format(context.getResources().getString(R.string.string_resource_name));
 textView.setText(getSpannedText(s));
and*_*ers 25
正如David Olsson所说,您可以在字符串资源中使用HTML:
<resource>
    <string name="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包含格式嵌入.
svk*_*aka 11
在 kotlin 中,您可以在资源(活动|片段|上下文)上创建扩展函数,将您的字符串转换为 html span
例如
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()
来自 Android 官方网站的简单且最新的答案(使用%s或%1$s等占位符):来源
首先,您将像这样添加字符串strings.xml:
<string name="welcome">Welcome to <b>Android</b> %1$s, %2$s!</string>
在这里,您将把<b 之前的 b 替换为<
要像这样:
<string name="welcome">Welcome to <b>Android</b> %1$s, %2$s!</string>
在 kotlin 代码中,您将进行扩展以从 html 解析字符串:
fun String.fromHtml(): Spanned {
return 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
    Html.fromHtml(this, Html.FROM_HTML_MODE_LEGACY)
} else {
    Html.fromHtml(this)
 }
}
然后像这样使用它:
val escapedString: String = TextUtils.htmlEncode("programmers & friends")
val textView : TextView = findViewById(R.id.myTextView)
textView.text = getString(R.string.welcome, "Studio", escapedString).fromHtml()
输出:欢迎来到Android Studio,程序员和朋友们!
字符串.xml
<string name="my_text"><Data><![CDATA[<b>Your text</b>]]></Data></string>
设置
textView.setText(Html.fromHtml(getString(R.string.activity_completed_text)));
| 归档时间: | 
 | 
| 查看次数: | 97654 次 | 
| 最近记录: |