有没有办法在JetPack上使用android:autoLink功能撰写文本?
我知道,在一个简单的标记/修饰符中使用这个特性可能不是“声明式方式”,但也许有一些简单的方法吗?
对于样式文本,我可以使用这种方式。
val apiString = AnnotatedString.Builder("API provided by")
apiString.pushStyle(
style = SpanStyle(
color = Color.Companion.Blue,
textDecoration = TextDecoration.Underline
)
)
apiString.append("https://example.com")
Text(text = apiString.toAnnotatedString())但是,我怎么处理这里的点击呢?如果我用编程的方式说出我对系统(电子邮件、电话、网络等)的期望,那就太好了。我喜欢它。与TextView一起工作。谢谢
发布于 2020-11-08 18:32:45
我们可以在Android组合中实现Linkify类型的TextView,如下例所示,
@Composable
fun LinkifySample() {
val uriHandler = UriHandlerAmbient.current
val layoutResult = remember {
mutableStateOf<TextLayoutResult?>(null)
}
val text = "API provided by"
val annotatedString = annotatedString {
pushStyle(
style = SpanStyle(
color = Color.Companion.Blue,
textDecoration = TextDecoration.Underline
)
)
append(text)
addStringAnnotation(
tag = "URL",
annotation = "https://example.com",
start = 0,
end = text.length
)
}
Text(
fontSize = 16.sp,
text = annotatedString, modifier = Modifier.tapGestureFilter { offsetPosition ->
layoutResult.value?.let {
val position = it.getOffsetForPosition(offsetPosition)
annotatedString.getStringAnnotations(position, position).firstOrNull()
?.let { result ->
if (result.tag == "URL") {
uriHandler.openUri(result.item)
}
}
}
},
onTextLayout = { layoutResult.value = it }
)
}在上面的例子中,我们可以看到我们给出了文本,我们还使用addStringAnnotation来设置标记。使用tapGestureFilter,我们可以得到点击的注释。
最后,使用UriHandlerAmbient.current,我们可以打开链接,如电子邮件,电话,或网络。
参考资料:https://www.hellsoft.se/rendering-markdown-with-jetpack-compose/
https://stackoverflow.com/questions/64739312
复制相似问题