【问题标题】:Jetpack compose display html in textJetpack compose 在文本中显示 html
【发布时间】:2021-06-22 14:56:26
【问题描述】:

我有一个包含 html 的字符串,如何在 Jetpack compose Text 中显示它?

在 TextView 中,我会使用 Spanned 并执行以下操作:

TextView.setText(Html.fromHtml("<p>something", HtmlCompat.FROM_HTML_MODE_LEGACY)

如何使用 Jetpack compose 中的文本执行此操作?

【问题讨论】:

  • 您需要创建一个AnnotatedString。目前我不知道任何现有的 HTML->AnnotatedString 转换器库,但我确信最终会有人创建一个。
  • 也许this library 可以满足您的需求。

标签: android android-jetpack-compose android-jetpack-compose-text


【解决方案1】:

答案与 Yhondri 相同,但如果您的目标是 api >24,则使用 HtmlCompat:

@Composable
fun Html(text: String) {
    AndroidView(factory = { context ->
        TextView(context).apply {
            setText(HtmlCompat.fromHtml(text, HtmlCompat.FROM_HTML_MODE_LEGACY))
        }
    })
}

【讨论】:

    【解决方案2】:

    很遗憾,Jetpack compose 还不支持 HTML...

    所以,你可以做的是:

    选项 1:创建您自己的 HTML 解析器

    Jetpack compose 支持基本样式,例如粗体、颜色、字体等。因此,您可以循环遍历原始 HTML 文本并手动应用文本样式。

    选项 2:将旧的 TextView 集成到您的 Jetpack 组合中。

    请阅读:Adopting Compose in your app

    谢谢。

    【讨论】:

    • 我会接受这个答案,因为看起来这些是目前唯一的选择。
    • @Stephan 是的,这就是我们现在所拥有的一切......谢谢。
    【解决方案3】:

    您可以将旧的 TextView 集成到您的 Jetpack 组合中,如下所示:

    AndroidView(factory = { context ->
                        TextView(context).apply {
                            text = Html.fromHtml(your_html)
                        }
                    })
    

    更多信息:https://foso.github.io/Jetpack-Compose-Playground/viewinterop/androidview/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 2023-02-25
      • 2020-12-22
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      相关资源
      最近更新 更多