我们在本章回中介绍的内容还围绕文本组件,我们主要介绍如何扩展文本组件,扩展主要分三个方面:可以选择的文本,可以点击的文本,多种形式的文本。下面是详细的的描述:
对文本组件的这种扩展由SelectionContainer
组合函数和Text
组合函数共同完成,它的用法和正常的文本组件用法相同,只需要在文本组件外层嵌套一个SelectionContainer
组件就可以,我们将在后面的小节中通过示例代码来演示具体的用法。
对文本组件的这种扩展由ClickableText
组合函数实现,该函数包含两个重要的参数,详细如下:
对文本组件的这种扩展由AnnotationText
类型的文本实现,把该类型的文本直接赋值给文本组件的text参数就可以。在创建该类型的文本时需要借助buildAnnotatedString
函数,该函数和withStyle
组合函数配合使用,可以创建多种不同风格的文本,我们将在后面的小节中通过示例代码来演示具体的用法。
//可以选择的文本,主要是嵌套了一个SelectionContainer函数
SelectionContainer() {
Text(text = "click me and then selected")
}
//多种形式的文本
Text(text = buildAnnotatedString {
withStyle( style = SpanStyle(color = Color.Red, fontSize = 12.sp)) {
append("part1")
}
withStyle( style = SpanStyle(color = Color.Green, fontSize = 22.sp)) {
append("part2")
}
withStyle( style = SpanStyle(color = Color.Blue)) {
append("part3")
}
})
//可以点击的文本
val annotationText = buildAnnotatedString {
withStyle(style = SpanStyle(fontSize = 24.sp)) {
append("url:")
}
withStyle(
style = SpanStyle(color = Color.Red, textDecoration = TextDecoration.Underline)
) {
pushStringAnnotation(
tag = "URL",
annotation = "www.baidu.com",
)
append("address")
pop()
}
}
ClickableText(text = annotationText,
onClick = {
offset -> annotationText.getStringAnnotations(
tag = "URL",
start = offset,
end = offset
).toString()
Log.d("tag","text is clicked : ${annotationText.toString()}")
}
)
在上面的代码中创建了三种扩展文本,编译并且运行上面的代码可以得到下面的运行结果:
其中可以选择的文本和多种形式的文本可以直接在图片中看到,可以点击的文本需要点击文本,此时会输出log。建议大家结合上面的代码自己动手去实践一下。
文本组件是程序中常用的组件,我们可以对它进行扩展以适应不同的需求,最后,我们对这些扩展做一个总结:
看官们,关于Jetpack中文本组件的扩展就介绍到这里,欢迎大家在评论区交流与讨论!