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

如何为Jetpack Compose中ClickableText的AnnotatedString添加波纹效果?

为Jetpack Compose ClickableText中的指定文本添加波纹效果

ClickableText默认的波纹效果作用于整个控件,要给Privacy Policy这类特定标注文本添加独立的按压波纹,最优雅的实现方式是借助InlineTextContent,将目标文本替换为自带波纹的可点击Text组件,避免手动计算文本布局边界的繁琐操作。

实现步骤:

  1. 定义带波纹的InlineTextContent
    将需要添加波纹的文本包装在带clickable修饰符的Text中,通过rememberRipple启用波纹效果:
val privacyInlineContent = InlineTextContent(
    Placeholder(
        width = WrapContent,
        height = WrapContent,
        placeholderVerticalAlign = PlaceholderVerticalAlign.TextCenter
    )
) {
    Text(
        text = "Privacy Policy",
        // 保持与主文本一致的样式,可按需调整
        style = MaterialTheme.typography.bodyMedium,
        modifier = Modifier
            .clickable(
                interactionSource = remember { MutableInteractionSource() },
                indication = rememberRipple() // 启用按压波纹
            ) {
                // 在这里处理隐私政策的点击逻辑
                // 例:navController.navigate(Screen.PrivacyPolicy.route)
            }
    )
}
  1. 构建包含Inline内容的AnnotatedString
    在构建文本时,使用pushInlineContent插入上述自定义内容:
val annotatedText = buildAnnotatedString {
    append("SomeText ")
    // 插入可点击的隐私政策文本
    pushInlineContent(id = "privacy")
    appendPlaceholder(
        placeholder = privacyInlineContent.placeholder,
        contentId = "privacy"
    )
    pop()
}
  1. 在ClickableText中关联Inline内容
    通过inlineContent参数将自定义内容与AnnotatedString绑定:
ClickableText(
    text = annotatedText,
    inlineContent = mapOf("privacy" to privacyInlineContent),
    // 主文本无需点击逻辑,留空即可
    onClick = {}
)

优势说明

这种方式无需手动计算文本的坐标边界,直接利用Compose的组件组合能力实现独立的波纹交互,同时可以灵活控制可点击文本的样式,保证与整体文本风格统一。如果需要保留原有的字符串标注逻辑,也可以在InlineTextContent的点击事件中结合标注信息扩展功能。

内容的提问来源于stack exchange,提问作者Martynas B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:23:14