You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose AlertDialog无法显示HTML格式正文文本求助

解决Compose AlertDialog中HTML文本不渲染的问题

问题原因

你直接在Compose的AlertDialog的text参数里创建了TextView实例,但没有将其纳入Compose的布局系统,导致这个原生View无法被渲染,所以只能看到未解析的纯文本。

解决方法

方法一:用AndroidView嵌入原生TextView

在Compose中必须通过AndroidView来包裹原生View,才能让Compose识别并渲染它。修改text区块的代码:

text = {
    SelectionContainer {
        AndroidView(factory = { context ->
            TextView(context).apply {
                text = Html.fromHtml(stringResource(R.string.about_app), Html.FROM_HTML_MODE_COMPACT)
                // 如果文本包含链接,添加这行让链接可点击
                movementMethod = LinkMovementMethod.getInstance()
            }
        })
    }
}

方法二:用Compose原生API解析HTML(推荐)

避免混用原生View,直接将HTML转换为Compose支持的AnnotatedString,用Compose的Text组件显示:

  1. 先添加HTML转AnnotatedString的工具函数:
@Suppress("DEPRECATION")
fun htmlToAnnotatedString(html: String): AnnotatedString {
    val spanned = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        Html.fromHtml(html, Html.FROM_HTML_MODE_COMPACT)
    } else {
        Html.fromHtml(html)
    }
    return spanned.toAnnotatedString()
}
  1. 修改AlertDialog的text部分:
text = {
    SelectionContainer {
        Text(
            text = htmlToAnnotatedString(stringResource(R.string.about_app)),
            // 内容过长时添加滚动支持
            modifier = Modifier.verticalScroll(rememberScrollState())
        )
    }
}

注意事项

确保你的Strings资源中HTML格式正确,建议用CDATA包裹避免转义问题:

<string name="about_app"><![CDATA[
    <b>关于本应用</b><br>
    这是一款演示应用,支持以下特性:<br>
    <ul>
        <li>自定义主题</li>
        <li>离线缓存</li>
    </ul>
]]></string>

内容的提问来源于stack exchange,提问作者Alix Blaine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 06:16:17