首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于Android的AutoLink编写文本

用于Android的AutoLink编写文本
EN

Stack Overflow用户
提问于 2020-11-08 14:37:30
回答 1查看 4K关注 0票数 8

有没有办法在JetPack上使用android:autoLink功能撰写文本?

我知道,在一个简单的标记/修饰符中使用这个特性可能不是“声明式方式”,但也许有一些简单的方法吗?

对于样式文本,我可以使用这种方式。

代码语言:javascript
复制
 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一起工作。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-08 18:32:45

我们可以在Android组合中实现Linkify类型的TextView,如下例所示,

代码语言:javascript
复制
@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/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64739312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档