前言
如何快速高效的掌握一门学问,建议先阅读下这篇文章关于学习的一些看法。
码字不易,记得关注+点赞+收藏
该系列的其他文章:JetPack Compose系列之总览
概述
- 文字对任何界面都属于核心内容,而利用 Jetpack Compose 可以更轻松地显示或写入文字。
- Compose 提供了基础的
BasicText和BasicTextField,它们是用于显示文本和处理用户输入的主要函数。Compose 还提供了更高级的Text和TextField,它们是遵循 Material Design 准则的可组合项。 - 建议在 Android 平台上使用这些构建块,因为它们的外观和样式非常适合 Android 用户,而且还包括可用以简化用户自定义设置的其他选项,无需编写大量代码。
Text的属性
fun Text(
text: String,//文本内容
modifier: Modifier = Modifier,//修饰符
color: Color = Color.Unspecified,//文本颜色
fontSize: TextUnit = TextUnit.Unspecified,//文本大小
fontStyle: FontStyle? = null,//文本样式, 如普通、粗体、斜体等
fontWeight: FontWeight? = null,//文本粗细
fontFamily: FontFamily? = null,//文本字体
letterSpacing: TextUnit = TextUnit.Unspecified,//文本之间的间距
textDecoration: TextDecoration? = null,//文本装饰,如下划线、删除线等
textAlign: TextAlign? = null,//对齐方式,如 start、center、end 等
lineHeight: TextUnit = TextUnit.Unspecified,//行高(单位sp)
overflow: TextOverflow = TextOverflow.Clip,//文本溢出的视觉效果
softWrap: Boolean = true,//文本是否换行
maxLines: Int = Int.MAX_VALUE,//文本最大行数
onTextLayout: (TextLayoutResult) -> Unit = {},//文本在布局中的位置
style: TextStyle = LocalTextStyle.current//文本样式,如颜色、字体、行高等
)
Text的应用
1、显示文本内容
- 显示以
String作为参数文本:
Text("Hello World")
- 显示资源中的文本:
Text(stringResource(R.string.hello_world))
建议使用字符串资源,而不是对 Text 值进行硬编码,因为使用字符串资源时可以与 Android 视图共享相同的字符串,并为应用国际化做好准备。
2、设置文本样式
- 设置文本颜色
Text("Hello World", color = Color.Blue)
- 设置文本大小
Text("Hello World", fontSize = 30.sp)
- 设置文本粗细
Text("Hello World", fontWeight = FontWeight.Bold)
- 设置文本为斜体
Text("Hello World", fontStyle = FontStyle.Italic)
-
添加阴影
借助
style参数,可以设置一个类型为TextStyle的对象并配置多个参数,例如阴影。Shadow会接收阴影颜色、偏移量或相对于Text所在的位置和模糊半径(用来控制模糊效果)。
val offset = Offset(5.0f, 10.0f)
Text(
text = "Hello world!",
style = TextStyle(
fontSize = 24.sp,
shadow = Shadow(
color = Color.Blue, offset = offset, blurRadius = 3f
)
)
)
-
添加多种样式
如需在同一
Text可组合项中设置不同的样式,可使用AnnotatedString,该字符串可使用任意注解样式进行注解。AnnotatedString是一个数据类,其中包含:- 一个
Text值 - 一个
SpanStyleRange的List,等同于位置范围在文字值内的内嵌样式 - 一个
ParagraphStyleRange的List,用于指定文字对齐、文字方向、行高和文字缩进样式
TextStyle用于Text可组合项, 而SpanStyle和ParagraphStyle用于AnnotatedString。AnnotatedString有一个类型安全的构建器创建:buildAnnotatedString。 - 一个
Text(
buildAnnotatedString {
withStyle(style = SpanStyle(color = Color.Blue)) {
append("H")
}
append("ello ")
withStyle(style = SpanStyle(fontWeight = FontWeight.Bold, color = Color.Red)) {
append("W")
}
append("orld")
}
)
3、设置段落样式
-
设置文本对齐方式
借助
textAlign参数,可以在Text可组合项 Surface 区域内设置文本的水平对齐方式。默认情况下,
Text会根据其内容值选择自然的文字对齐方式:- 对于从左到右书写的文字,如拉丁语、西里尔文或朝鲜文,向
Text容器的左边缘对齐 - 对于从右到左书写的文字,如阿拉伯语或希伯来语,向
Text容器的右边缘对齐
- 对于从左到右书写的文字,如拉丁语、西里尔文或朝鲜文,向
Text(
"Hello World",
textAlign = TextAlign.Center,
modifier = Modifier.width(150.dp)
)
如果要手动设置 Text 可组合项的文本对齐方式,最好分别使用 TextAlign.Start 和 TextAlign.End(而不是 TextAlign.Left 和 TextAlign.Right),因为它们会根据首选语言文本方向解析为 Text 可组合项的右边缘。例如,TextAlign.End 对于法语文字将向右侧对齐,而对于阿拉伯语文字则将向左侧对齐,但无论对于哪种文字,TextAlign.Right 都将向右侧对齐。
注意:文字对齐与布局对齐不同,后者指的是容器(例如 Row 或 Column)中的可组合项定位。
TextStyle和FontStyle的区别?
TextStyle 和 FontStyle 都可以用于定义 Text 组件的字体样式,但是它们的作用有所不同。
FontStyle 是一个枚举类,定义了四个值:Normal、Italic、Oblique 和 Default。它用于指定字体的风格,比如是否倾斜或斜体。
TextStyle 是一个类,它包含了多个属性,可以用来定义字体的各种样式,包括字体大小、字体颜色、字体家族、字体粗细、字体风格等等。在实际使用中,TextStyle 通常被用于定义更加详细和精细的字体样式,而 FontStyle 则更多地被用于定义字体的基本风格。
3、配置文本布局
- 限制可见行数
Text("hello ".repeat(50), maxLines = 2)
- 文本溢出处理
Text(
"Hello Compose ".repeat(50),
maxLines = 2,
overflow = TextOverflow.Ellipsis
)