我的 strings.xml
中有一个字符串,它针对不同的语言进行了本地化。
字符串的样式为每个本地化的 Html 标记。
使用 Android TextView
,我能够通过读取字符串资源很好地显示样式文本。
考虑到 Jetpack Compose 当前 (1.0.0-rc02)
不支持 Html 标签,我尝试在 TextView
可组合内使用 AndroidView
官方文档:https://developer.android.com/jetpack/compose/interop/interop-apis#views-in-compose
我尝试过的示例:
@Composable
fun StyledText(text: String, modifier: Modifier = Modifier) {
AndroidView(
modifier = modifier,
factory = { context -> TextView(context) },
update = {
it.text = HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_COMPACT)
}
)
}
strings.xml
文件中的文本:
<string name="styled_text">Sample text with <b>bold styling</b> to test</string>
但是,使用 stringResource(id = R.string.styled_text)
提供的文本没有 Html 标记。
有没有办法在 Jetpack Compose 中使用 Html 样式显示来自字符串资源的文本?
以下两个问题类似,但它们不从资源中读取字符串:
答案 0 :(得分:1)
stringResource
在底层使用 resources.getString
,它丢弃任何样式信息。您需要创建类似 textResource
的内容来获取原始值:
@Composable
@ReadOnlyComposable
fun textResource(@StringRes id: Int): CharSequence =
LocalContext.current.resources.getText(id)
像这样使用它:
StyledText(textResource(id = R.string.foo))
@Composable
fun StyledText(text: CharSequence, modifier: Modifier = Modifier) {
AndroidView(
modifier = modifier,
factory = { context -> TextView(context) },
update = {
it.text = text
}
)
}