Compose - Text 详解

文字大小 ☆

Text(
text = stringResource(id = R.string.hello_world),
fontSize = 40.sp
)

字体样式 ☆

  • Normal 默认
  • Italic 斜体

Column {
Text(
text = value,
fontStyle = FontStyle.Normal
)
Text(
text = value,
fontStyle = FontStyle.Italic
)
}

image.png

字体加粗 ☆

Text(
text = value,
fontWeight = FontWeight.W800
)

下图中 左右两边等价

image.png

image.png

字体 ☆

Text(
text = value,
fontFamily = FontFamily.Default
)

image.png

可以使用 fontFamily 属性来处理 res/font 文件夹中定义的自定义字体和字型

image.png

  • 需要注意 引入的字体库名称 必须仅包含小写字母az,0-9或下划线
  • 引入完成就以后需要rebuild一下,否则无法找到 font
  • 字体下载

val fontFamily = FontFamily(
Font(resId = R.font.myfont, weight = FontWeight.Normal)
)
Text(
text = “Demo Text”,
style = TextStyle(
fontFamily = fontFamily,
)
)

字间隔空 ☆

Text(
text = value,
letterSpacing = 2.sp
)

image.png

文字装饰 ☆

Text(
text = value,
textDecoration = TextDecoration.None
)

image.png

对齐方式 ☆

相当于传统的 android:gravity='left'

Text(
text = value,
textAlign = TextAlign.Left
)

image.png

其中Justify表示两端贴边

image.png

TextAlign.StartTextAlign.Left的区别

有些国家的文字是从右往左。例如阿拉伯语。

  • TextAlign.Left表示 不管你是什么语言,都是靠左
  • TextAlign.Start会根据首选项语言去选择从左还是从右

image.png

行高 ☆

Text(
text = value,
lineHeight = 30.sp
)

image.png

最大行数

Text("hello ".repeat(50), maxLines = 2)

image.png

文字溢出

Text(
text = value,
overflow = TextOverflow.Ellipsis,
maxLines = 1
)

  • Clip 将溢出的部分裁剪
  • Ellipsis 使用省略号表示溢出部分
  • Visible 指定范围内没有足够的空间。也要显示所有文本

image.png

关于最后一个Visible官网中可以找到示例去演示器效果。笔者这边简化了一下。示例如下。

Box(modifier = Modifier
.size(300.dp, 150.dp)
.background(Color.Red)) {
Text(
text = “Hello World”.repeat(2),
modifier = Modifier
.size(200.dp, 70.dp)
.background(Color.Yellow),
fontSize = 35.sp,
overflow = TextOverflow.Visible,
)
}

未设置Visible设置了Visible
image.pngimage.png

换行处理

Text(
text = value2,
softWrap = false
)

  • false 被定位为有无限的水平空间
  • true 默认会有边界

image.png

onTextLayout

计算新的文本布局时执行的回调.预览是不打印的。只有运行才会打印

@Preview(showBackground = true)
@Composable
fun SimpleText7() {
val value = “hello world”
Column(Modifier.width(200.dp)) {
Text(
text = value,
onTextLayout = {
Log.i(“TAGText”,it.toString())
}
)
}
}

运行以后的结果,可以看到所有的属性都被打印出来了

2021-04-14 11:40:50.016 16830-16830/com.starot.pencase_compose I/TAGText: TextLayoutResult(layoutInput=TextLayoutInput(
text=hello world,
style=TextStyle(color=Color(0.0, 0.0, 0.0, 1.0, sRGB IEC61966-2.1),
fontSize=Unspecified,
fontWeight=null,
fontStyle=null,
fontSynthesis=null,
fontFamily=null,
fontFeatureSettings=null,
letterSpacing=Unspecified,
baselineShift=null,
textGeometricTransform=null,
localeList=null,
background=Color(0.0, 0.0, 0.0, 0.0, None),
textDecoration=null,
shadow=null,
textAlign=null,
textDirection=null,
lineHeight=Unspecified,
textIndent=null),
placeholders=[],
maxLines=2147483647,
softWrap=true,
overflow=Clip,
density=DensityImpl(density=2.75, fontScale=1.0),
layoutDirection=Ltr,
resourceLoader=androidx.compose.ui.platform.AndroidFontResourceLoader@7058a4b,
constraints=Constraints(minWidth = 0, maxWidth = 550, minHeight = 0, maxHeight = 1977)),
multiParagraph=androidx.compose.ui.text.MultiParagraph@e80ec28,
size=184 x 52,
firstBaseline=41.0,
lastBaseline=41.0, placeholderRects=[])

文字样式 🔥

style属性的TextStyle类中。有很多就可以在Text的构造方法中去执行。但是依然有一些特殊的属性

背景颜色

style = TextStyle(
background = Color.Red
)

image.png

基线偏移

Text(
text = value,
style = TextStyle(
baselineShift = BaselineShift.Subscript
)
)

说明这个属性之前,要明白什么是基线。用hencoder中描述

每只小鸟的最高点和最低点都不一样,但画面很平衡,而这个用来让所有文字互相对齐的基准线,就是基线( baseline )

Android Text 的基线baseline

image.png

实际运行效果呢?

笔者这边选择了 3个参数进行演示。

image.png

BaselineShift给我们提供了3个默认的选项

  • val Superscript = BaselineShift(0.5f)
  • val Subscript = BaselineShift(-0.5f)
  • val None = BaselineShift(0.0f)

合成字体

fontSynthesis = FontSynthesis.All

合成字体用于指定当使用的FontFamily不包含粗体或斜体时,系统是否应该伪造粗体或倾斜字形。

  • None 关闭字体合成。 如果FontFamily中不存在粗体和斜体,则不会合成它们
  • Weight 如果FontFamily中不提供,则仅合成粗体。 倾斜的字体将不会被合成。
  • Style 如果FontFamily中不可用,则仅合成倾斜的字体。 粗体字体将不被合成。
  • All 如果FontFamily中不提供粗体和倾斜字体,则系统会合成粗体和倾斜字体

文字缩进

Text(
text = “hello world”.repeat(2),
style = TextStyle(
textIndent = TextIndent(10.sp,10.sp)
)
)

class TextIndent(
//第一行的缩进
val firstLine: TextUnit = 0.sp,
//除了第一行其他行的缩进
val restLine: TextUnit = 0.sp
)

image.png

文字方向

style = TextStyle(
textDirection = TextDirection.Ltr
)

一般情况下。我们用到的都是从左往右。也有一些国家的语言是从右往左,例如阿拉伯语

image.png

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

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

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

img

img

img

img

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

如果你觉得这些内容对你有帮助,可以扫码领取!!!!

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

当然我也为你们整理好了百度、阿里、腾讯、字节跳动等等互联网超级大厂的历年面试真题集锦。这也是我这些年来养成的习惯,一定要学会把好的东西,归纳整理,然后系统的消化吸收,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。这和我们收集资料就要收集那些系统化的,是一个道理。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可免费领取!

试真题集锦。这也是我这些年来养成的习惯,一定要学会把好的东西,归纳整理,然后系统的消化吸收,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。这和我们收集资料就要收集那些系统化的,是一个道理。

[外链图片转存中…(img-wFXeMBbO-1711246198075)]

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可免费领取!

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值