Jetpack Compose系列-Text组件花式使用!,膜拜

知道了,每个属性的意思,我们接下来一起看看,配置各属性后的效果展示。

Text各属性示例效果

text 显示文本

Jetpack Compose系列-Text组件花式使用!

对于用户界面而言,文本是最基础而又核心的内容,在传统的 Android Native 开发中,需要用一个TextView来显示一个文本。在Jetpack Compose 中,提供了Text可组合函数(即组件,后面的文章都会称其为“组件”),可更轻松的显示文本。在本文中,将带大家一起探索Text组件的各种用法。

Text 属性介绍

在Jetpack Compose 中,组件是一个特殊的Kotlin 函数,因此Text其实也是一个函数,而它提供了很多参数来配置文本的显示外观。这些参数就是组件的属性。看一下Text组件有哪些属性:

@Composable
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,
// 每一行的行高
lineHeight: TextUnit = TextUnit.Unspecified,
// 文本溢出的显示效果
overflow: TextOverflow = TextOverflow.Clip,
// 是否自动换行
softWrap: Boolean = true,
// 最多显示几行
maxLines: Int = Int.MAX_VALUE,
// 计算布局时的回调
onTextLayout: (TextLayoutResult) -> Unit = {},
// 样式
style: TextStyle = LocalTextStyle.current
) {

}

Jetpack Compose 中,很多地方都用到了Kotlin 的特性,比如这里,就用到Kotlin的默认参数,Text 组件除了第一个参数text,其他都有默认值,也就是使用的时候可以不传,但是如果传多个参数时,一定要加参数名。比如,设置大小:

@Composable
fun MyText(){
Text(“Jetpack Compose,by 依然范特稀西”,
fontSize = 20.sp
)
}

第一个参数可以加参数名,也可以不加,但我个人还是推荐加上,因为他是一个组件,参数是它的属性,这样代码比较直观。像下面这样就比较好一点:

@Composable
fun MyText(){
Text(
text = “Jetpack Compose,by 依然范特稀西”,
fontSize = 20.sp
)
}

知道了,每个属性的意思,我们接下来一起看看,配置各属性后的效果展示。

Text各属性示例效果

text 显示文本

显示文字的最简单的方法是使用以 String 作为参数的 Text 组件:

@Composable
fun MyText(){
Text(“Jetpack Compose,by 依然范特稀西”)
}

也可以显示字符串资源,这也是推荐的方式,而不是直接将字符串写死在代码中,这样有利于替换或者国际化。

Jetpack Compose,by 依然范特稀西

@Composable
fun MyText(){
Text(stringResource(R.string.my_text))
}

color 更改文字颜色

@Composable
fun MyText() {
Text(
text = stringResource(R.string.my_text),
color = Color.Blue
)
}

fontSize 更改文字大小

@Composable
fun MyText() {
Text(
text = stringResource(R.string.my_text),
color = Color.Blue,
fontSize = 30.sp,
)
}

fontStyle 设置文字样式

fontStyle有2个取值,FontStyle.ItalicFontStyle.Normal

@Composable
fun MyText() {
Column{
Text(
text = stringResource(R.string.my_text),
fontStyle = FontStyle.Normal,
)
Text(
text = stringResource(R.string.my_text),
fontStyle = FontStyle.Italic,
)
}
}

fontWeight 更改文字的粗细程度

fontWeight 可以取 1- 1000之间的值,使用的时候,构造一个FontWeight即可:

FontWeight(50)

FontWeight 默认为我们定义几个默认值,100-900的整百值,并根据他们的显示效果取名为Bold,Light,Thin等等。

companion object {
/** [Thin] /
@Stable
val W100 = FontWeight(100)
/
* [ExtraLight] /
@Stable
val W200 = FontWeight(200)
/
* [Light] /
@Stable
val W300 = FontWeight(300)
/
* [Normal] / regular / plain /
@Stable
val W400 = FontWeight(400)
/
* [Medium] /
@Stable
val W500 = FontWeight(500)
/
* [SemiBold] /
@Stable
val W600 = FontWeight(600)
/
* [Bold] /
@Stable
val W700 = FontWeight(700)
/
* [ExtraBold] /
@Stable
val W800 = FontWeight(800)
/
* [Black] */
@Stable
val W900 = FontWeight(900)

/** Alias for [W100] /
@Stable
val Thin = W100
/
* Alias for [W200] /
@Stable
val ExtraLight = W200
/
* Alias for [W300] /
@Stable
val Light = W300
/
* The default font weight - alias for [W400] /
@Stable
val Normal = W400
/
* Alias for [W500] /
@Stable
val Medium = W500
/
* Alias for [W600] /
@Stable
val SemiBold = W600
/
*

  • A commonly used font weight that is heavier than normal - alias for [W700]
    /
    @Stable
    val Bold = W700
    /
    * Alias for [W800] /
    @Stable
    val ExtraBold = W800
    /
    * Alias for [W900] */
    @Stable
    val Black = W900

/** A list of all the font weights. */
internal val values: List = listOf(
W100,
W200,
W300,
W400,
W500,
W600,
W700,
W800,
W900
)

看一下他们的显示效果:

@Composable
fun MyText() {
Column {
Text(
text = stringResource(R.string.my_text),
fontWeight = FontWeight.Thin,
)
Text(
text = stringResource(R.string.my_text),
fontWeight = FontWeight.ExtraLight
)
Text(
text = stringResource(R.string.my_text),
fontWeight = FontWeight.Light
)
Text(
text = stringResource(R.string.my_text),
fontWeight = FontWeight.Normal
)
Text(
text = stringResource(R.string.my_text),
fontWeight = FontWeight.Medium
)
Text(
text = stringResource(R.string.my_text),
fontWeight = FontWeight.SemiBold
)
Text(
text = stringResource(R.string.my_text),
fontWeight = FontWeight.Bold
)
Text(
text = stringResource(R.string.my_text),
fontWeight = FontWeight.ExtraBold
)
Text(
text = stringResource(R.string.my_text),
fontWeight = FontWeight.Black
)
}
}

fontFamily 更改字体

fontFamily可以更改字体,FontFamily为我们默认内置了5种字体,DefaultSansSerifSerifMonospaceCursive

@Composable
fun MyText() {
Column {
Text(
text = stringResource(R.string.my_text),
fontFamily = FontFamily.Default,
)
Text(
text = stringResource(R.string.my_text),
fontFamily = FontFamily.SansSerif
)
Text(
text = stringResource(R.string.my_text),
fontFamily = FontFamily.Serif
)
Text(
text = stringResource(R.string.my_text),
fontFamily = FontFamily.Monospace
)
Text(
text = stringResource(R.string.my_text),
fontFamily = FontFamily.Cursive
)
}
}

letterSpacing 更改文字间距

letterSpacing更改文字间距,更确切的说是更改字符间距,因为如果是英文的话,不会按单词来设置间距,而是按字母。

@Composable
fun MyText() {
Text(
text = stringResource(R.string.my_text),
letterSpacing = 10.sp,
)
}

textDecoration 文字装饰器

textDecoration可以给文字装饰下划线和中划线。默认提供了三个值:

  • None: 无装饰效果
  • LineThrough: 添加中划线
  • Underline: 添加下划线

@Composable
fun MyText() {
Column {
Text(
text = stringResource(R.string.my_text),
textDecoration = TextDecoration.None,
)
Text(
text = stringResource(R.string.my_text),
textDecoration = TextDecoration.LineThrough,
)
Text(
text = stringResource(R.string.my_text),
textDecoration = TextDecoration.Underline,
)
}
}

除此之外,TextDecoration还提供了一个combine函数,可以将下划线和中划线组合:

@Composable
fun MyText() {
val combineDecoration = listOf(TextDecoration.Underline, TextDecoration.LineThrough)
Text(
text = stringResource(R.string.my_text),
textDecoration = TextDecoration.combine(combineDecoration)
)
}

textAlign 设置文字对齐方向

textAlign 可以设置Text组件内容的对齐方式,有TextAlign.StartTextAlign. EndTextAlign. CenterTextAlign. Justify 等值。默认情况下,Text 会根据其内容值选择自然的文字对齐方式:

  • 对于从左到右书写的文字,如拉丁语、西里尔文或朝鲜文,向 Text 容器的左边缘对齐
  • 对于从右到左书写的文字,如阿拉伯语或希伯来语,向 Text 容器的右边缘对齐

如果您想手动设置 Text 组件的文字对齐方式,最好分别使用 TextAlign.StartTextAlign.End(而不要使用 TextAlign.LeftTextAlign.Right),这样系统就可以根据具体语言的首选文字方向,将您的设置解析为向 Text 的右边缘对齐。例如,TextAlign.End 对于法语文字将向右侧对齐,而对于阿拉伯语文字则将向左侧对齐,但无论对于哪种文字,TextAlign.Right 都将向右侧对齐。

@Composable
fun MyText() {
Column {
Text(
text = stringResource(R.string.my_text),
modifier = Modifier
.size(300.dp, 50.dp)
.background(Color.Gray),
textAlign = TextAlign.Start
)
Text(
text = stringResource(R.string.my_text),
modifier = Modifier
.size(300.dp, 50.dp)
.background(Color.Gray),
textAlign = TextAlign.End
)
Text(
text = stringResource(R.string.my_text),
modifier = Modifier
.size(300.dp, 50.dp)
.background(Color.Gray),
textAlign = TextAlign.Center
)
Text(
text = stringResource(R.string.my_text),
modifier = Modifier
.size(300.dp, 50.dp)
.background(Color.Gray),
textAlign = TextAlign.Justify
)
}
}

注意:要对齐方式生效,需要给Text设置大小,因为Text组件默认的大小是包裹内容的,上面的代码我们用 modifier属性设置了Text组件的大小。

lineHeight 设置行高

lineHeight设置行高,值为一个具体数值,单位为sp

@Composable
fun MyText() {
Column {
Text(
text = “未设置lineHeight”.repeat(10),
)
Text(
text = “已经设置lineHeight”.repeat(10),
lineHeight = 30.sp
)

}
}

overflow 设置文本溢出效果

overflow设置当文本超出控件时的显示样式,有两个取值:

  • TextOverflow.Clip: 超出部分直接截断
  • TextOverflow.Ellipsis: 使用省略号表示文本已溢出

overflow一般配合maxLines使用

@Composable
fun MyText() {
Column {
Text(
text = stringResource(R.string.my_text).repeat(10),
overflow = TextOverflow.Clip,
maxLines = 2
)
Spacer(modifier = Modifier.height(20.dp))
Text(
text = stringResource(R.string.my_text).repeat(10),
overflow = TextOverflow.Ellipsis,
maxLines = 2
)

}
}

maxLines 设置最多显示行数

maxLines配置最多显示几行,该属性一般需要配置overflow,表明超出部分该如何显示,默认直接截断(Clip效果)。

@Composable
fun MyText() {
Column {
Text(
text = stringResource(R.string.my_text).repeat(10),
)
Spacer(modifier = Modifier.height(20.dp))
Text(
text = stringResource(R.string.my_text).repeat(10),
maxLines = 2,
)

}
}

image.png

softWrap 是否自动换行

默认为true,即会自动换行,如果设置为false,将不会自动换行。一般使用场景为:文本单行显示,超出默认截断或显示省略号,即配合overflow使用:

@Composable
fun MyText() {
Text(
text = stringResource(R.string.my_text).repeat(10),
softWrap = false,
overflow = TextOverflow.Ellipsis
)
}

onTextLayout 计算新的布局时回调函数

计算新的Text布局时回调函数,回调中可以获取一些结果,比如控件的size等。

@Composable
fun MyText() {
Text(
text = stringResource(R.string.my_text),
onTextLayout = {
Log.e(“xige”,“text width: ${it.size.width}, text height: ${it.size.height}”)
}
)
}

运行结果:

style 可以配置text 的颜色、字号、行高等等

颜色、字号、行高等那些属性效果,都可以用style来统一配置,除此之外,还有一些属性,如:shadow可以设置倒影效果,所有可配置属性如下:

@Composable
fun MyText() {
Text(
text = stringResource(R.string.my_text),
style = TextStyle(
color = Color.Blue,
fontSize = 20.sp,
lineHeight = 20.sp,
fontWeight = FontWeight.Bold,
fontFamily = FontFamily.Monospace,
fontStyle = FontStyle.Normal,
shadow = Shadow(
color = Color.Red,
offset = Offset(10.0f,10.0f),
blurRadius = 10.0f
)
)
)
}

modifier 修改器

最后来说说modifier,这个属性很重要,也不是Text组件所独有,基本所有组件都有这个属性,它可以修改组件外观比如:pading、宽高、背景、形状等等。但绝不仅于此,还要很多强大的功能,可以定义动画,自定义点击事件等等。由于篇幅有限,后面会单独写一篇Modifier的文章介绍。

@Composable
fun MyText() {
Text(
text = stringResource(R.string.my_text),
modifier = Modifier
.border(
width = 3.dp,
color = Color.Red,
shape = RoundedCornerShape(
topStart = 30.dp,
topEnd = 30.dp,
bottomStart = 20.dp,

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

以前一直是自己在网上东平西凑的找,找到的东西也是零零散散,很多时候都是看着看着就没了,时间浪费了,问题却还没得到解决,很让人抓狂。

后面我就自己整理了一套资料,还别说,真香!

资料有条理,有系统,还很全面,我不方便直接放出来,大家可以先看看有没有用得到的地方吧。

系列教程图片

2020Android复习资料汇总.png

flutter

NDK

设计思想开源框架

微信小程序

上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-G6AM7kwI-1711960615931)]

最后

以前一直是自己在网上东平西凑的找,找到的东西也是零零散散,很多时候都是看着看着就没了,时间浪费了,问题却还没得到解决,很让人抓狂。

后面我就自己整理了一套资料,还别说,真香!

资料有条理,有系统,还很全面,我不方便直接放出来,大家可以先看看有没有用得到的地方吧。

[外链图片转存中…(img-hdoBhtNp-1711960615931)]

[外链图片转存中…(img-F20P9Dfx-1711960615931)]

[外链图片转存中…(img-8N5suM2s-1711960615931)]

[外链图片转存中…(img-QZtQBnQ1-1711960615932)]

[外链图片转存中…(img-2sfH1daE-1711960615932)]

[外链图片转存中…(img-JOpV4CaU-1711960615932)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 24
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值