Android Compose:如何在文本视图中使用HTML标记

Android Compose:如何在文本视图中使用HTML标记,android,html,android-jetpack-compose,spannable,Android,Html,Android Jetpack Compose,Spannable,我有一个来自外部源的字符串,其中包含以下格式的HTML标记: “你好,我是粗体文本” 在编写之前,我会在HTML字符串的开头使用CDATA,使用HTML.fromHtml()将其转换为span,并将其传递给TextView。TextView将用粗体字显示它们 我曾尝试用Compose复制这一点,但我找不到让我成功实现它的确切步骤 非常感谢您的建议。Compose Text()还不支持HTML。它刚刚进入测试阶段,所以可能会到来 我们现在实现的解决方案(这并不完美)是依靠旧的TextView控件,

我有一个来自外部源的字符串,其中包含以下格式的HTML标记: “你好,我是粗体文本”

在编写之前,我会在HTML字符串的开头使用CDATA,使用HTML.fromHtml()将其转换为span,并将其传递给TextView。TextView将用粗体字显示它们

我曾尝试用Compose复制这一点,但我找不到让我成功实现它的确切步骤

非常感谢您的建议。

Compose Text()还不支持HTML。它刚刚进入测试阶段,所以可能会到来

我们现在实现的解决方案(这并不完美)是依靠旧的TextView控件,Compose将允许您这样做


对于简单用例,您可以执行以下操作:

private fun String.parseBold(): AnnotatedString {
    val parts = this.split("<b>", "</b>")
    return buildAnnotatedString {
        var bold = false
        for (part in parts) {
            if (bold) {
                withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) {
                    append(part)
                }
            } else {
                append(part)
            }
            bold = !bold
        }
    }
}
private fun String.parseBold():AnnotatedString{
val parts=this.split(“,”)
返回编译字符串{
var bold=false
对于(部分中的部分){
如果(粗体){
withStyle(style=SpanStyle(fontwweight=fontwweight.Bold)){
附加(部分)
}
}否则{
附加(部分)
}
粗体=!粗体
}
}
}
并在@Composable中使用此注释字符串

Text(text = "Hello, I am <b> bold</b> text".parseBold())
Text(Text=“你好,我是粗体文本”。parseBold())

当然,当您尝试支持更多标记时,这会变得更加棘手。

您需要将该HTML转换为
注释字符串。另外,目前没有HTML->
AnnotatedString
转换器或
span
->
AnnotatedString
转换器。有两个Markdown->
AnnotatedString
转换器,但在这种特殊情况下,这不太可能有帮助。您可能需要自己创建一个合适的转换器。@commonware这并不是我所希望的答案,但感谢您这么快的回复。这会帮我省去很多徒劳的搜索。非常感谢。