Jetpack Compose中如何解决ClickableText因LinkAnnotation相关的弃用警告问题?
Jetpack Compose中如何解决ClickableText因LinkAnnotation相关的弃用警告问题?
嗨,我来帮你搞定这个警告问题!这个提示其实是Compose官方在引导我们使用更简洁、更符合现代API设计的写法——用LinkAnnotation替代原来手动处理ClickableText点击偏移量的方式。
你之前尝试用Text/BasicText但没找到怎么加LinkAnnotation,其实是因为写法和原来的pushStringAnnotation不一样,我给你一步步拆解修改方案:
核心思路
原来的ClickableText配合pushStringAnnotation手动判断点击偏移的方式已经被官方推荐替换,现在我们可以直接在AnnotatedString中用LinkAnnotation定义可点击区域,然后用普通的Text组件就能自动处理点击逻辑,不需要再自己写偏移判断的代码。
修改后的完整代码
private const val GROUP_NAME_TAG = "groupName" @Composable fun ExpenseHeaderGroupWithDateText( modifier: Modifier = Modifier, date: ShimmerInformation<String>, groupName: String, groupNameClick: () -> Unit, ) { date.ToContent( loadingModifier = modifier .height(15.dp) .width(50.dp), ) { safeDate -> val annotatedText = buildAnnotatedString { withStyle( style = SpanStyle( color = Black300, fontSize = 14.sp, fontWeight = FontWeight.W400, ) ) { append("$safeDate ${stringResource(id = R.string.in_connector)} ") } // 替换原来的pushStringAnnotation,用LinkAnnotation定义点击行为 pushLinkAnnotation(LinkAnnotation.Clickable(onClick = groupNameClick)) withStyle( style = SpanStyle( color = Black300, fontSize = 14.sp, fontWeight = FontWeight.W400, textDecoration = TextDecoration.Underline ) ) { append(groupName) } pop() // 弹出LinkAnnotation,结束当前可点击区域的定义 } // 用普通Text组件替代ClickableText,它会自动识别并处理LinkAnnotation Text( modifier = modifier, text = annotatedText, overflow = TextOverflow.Ellipsis, maxLines = 1, // 可选:如果需要自定义链接的默认样式(比如未点击的颜色),可以在这里设置 style = TextStyle( linkColor = Black300 ) ) } }
关键修改点说明
- 替换
pushStringAnnotation为pushLinkAnnotation:直接把点击回调groupNameClick传给LinkAnnotation.Clickable,不需要再通过tag去解析偏移量。 - 用
Text替代ClickableText:Text组件在Compose 1.4.0及以上版本已经支持识别AnnotatedString中的LinkAnnotation,自动处理点击事件,同时保留你需要的overflow和maxLines参数。 - 移除手动偏移判断逻辑:原来
ClickableText的onClick里那段解析getStringAnnotations的代码可以完全删掉,因为LinkAnnotation已经帮我们处理了点击区域的识别。
注意事项
确保你的Compose版本在1.4.0或以上,因为LinkAnnotation是在这个版本才被引入的,如果版本过低需要先升级依赖哦。
备注:内容来源于stack exchange,提问作者Pierre Vieira




