Jetpack Compose Modifier用法详解,2024年最新腾讯研发面试题

  • size() 指定元素的首选宽度和高度

注意:修饰符的函数调用顺序非常重要。由于每个函数都会对上一个函数返回的 Modifier 进行更改,因此顺序会影响最终结果。比如上面是对Column整体控件都可以点击,但如果我们把,padding跟clickable的修饰符的顺序换一下。那么Column的点击范围就需要扣除padding的部分。

@Composable
fun ArtistCard(//) {
val padding = 16.dp
Column(
modifier = Modifier
.clickable(onClick = onClick)
.padding(padding)
.fillMaxWidth()
) {
// rest of the implementation
}
}

二:常用的Modifier的函数方法介绍

Modifier涉及到的方法很多,我们可以从官网的地址去查看Modifier方法,下面我们会进可能的去涉及解释到常用方法的使用。

@Composable
fun PaddedComposable() {
Box(modifier = Modifier.size(300.dp,300.dp).background(Color.Blue)){}
}

@Composable
fun PaddedComposable() {
Text(“Hello World”, modifier = Modifier.padding(20.dp))
}

@Preview()
@Composable
fun paddingTest(){
Column(modifier = Modifier.size(200.dp).background(Color.Gray).padding(20.dp)) {
Box(modifier = Modifier.size(30.dp).background(Color.Red).padding(top = 4.dp)) {}
Box(modifier = Modifier.size(30.dp).padding(start = 4.dp,top = 4.dp).background(Color.Green)) {}
Box(modifier = Modifier.size(30.dp).padding(vertical = 4.dp).background(Color.Red)) {}
Box(modifier = Modifier.size(30.dp).padding(horizontal = 4.dp).background(Color.Green)) {}
}
}

@Preview()
@Composable
fun modiferTest(){
Box(modifier = Modifier.size(300.dp,300.dp){}
}

@Composable
fun FixedSizeComposable() {
Box(Modifier.size(90.dp, 150.dp).background(Color.Green)) {
Box(Modifier.requiredSize(100.dp, 100.dp).background(Color.Red))
}
}

  • fillMaxHeight 填充父项为它提供的最大的高度
  • fillMaxWidth 填充父项为它提供的最大的宽度
  • fillMaxSize 填充父项的宽高
  • width 宽度

@Preview()
@Composable
fun modiferTest(){
Box(modifier = Modifier.size(300.dp,300.dp).background(Color.Blue)){
Box(modifier = Modifier.fillMaxHeight().fillMaxWidth().background(Color.Green))
Box(modifier = Modifier.fillMaxWidth().height(50.dp).background(Color.Red))
Box(modifier = Modifier.width(50.dp).fillMaxHeight().background(Color.Black))
Box(modifier = Modifier.fillMaxSize().background(Color.Gray))
}
}

  • wrapContentSize 根据子级元素的宽高来确定自身的宽度和高度,如果自身设置了最小宽高的话则会被忽略。当unbounded参数为true的时候,自身设置了最大宽度的话也会被忽略
  • wrapContentWidth 根据子级元素的宽度来确定自身的宽度,如果自身设置了最小宽度的话则会被忽略。当unbounded参数为true的时候,自身设置了最大宽度的话也会被忽略

@Preview()
@Composable
fun modiferTest(){
Column(modifier = Modifier.wrapContentSize().background(Color.Blue).padding(10.dp){
Box(modifier = Modifier.size(30.dp, 30.dp).background(Color.Red)) {}
Box(modifier = Modifier.padding(top = 4.dp).wrapContentWidth().height(60.dp).background(Color.Green).padding(60.dp))
Box(modifier = Modifier.padding(top = 4.dp).width(60.dp).wrapContentHeight().background(Color.Gray).padding(30.dp)){}
}
}

  • preferredWidth 设置初始宽度
  • preferredHeight 设置初始高度

@Preview()
@Composable
fun preferredTest(){
Column(modifier = Modifier
.size(150.dp)
.background(Color.Red)){
Box(modifier = Modifier.preferredSize(40.dp).background(Color.Green))
Box(modifier = Modifier.padding(top = 4.dp).preferredSize(40.dp,20.dp).background(Color.Green))
Box(modifier = Modifier.padding(top = 4.dp).preferredWidth(40.dp).height(20.dp).background(Color.Green))
Box(modifier = Modifier.padding(top = 4.dp).width(20.dp).preferredHeight(40.dp).background(Color.Green))
}
}

  • widthIn(最小宽度,最大宽度) 设置自身的最小,最大宽度
  • heightIn(最小高度,最大高度) 设置自身的最小,最大高度

@Preview()
@Composable
fun preferredTest(){
Column(modifier = Modifier
.size(300.dp)
.background(Color.Red)){
Text(text = “测试测试测试”, modifier = Modifier.sizeIn(40.dp,40.dp,100.dp,100.dp))
Text(text = “测试测试,测试测试,测试测试”, modifier = Modifier.sizeIn(40.dp,40.dp,100.dp,100.dp))
Text(text = “测试”, modifier = Modifier.widthIn(20.dp,100.dp))
Text(text = “测试,测试,测试”, modifier = Modifier.widthIn(20.dp,100.dp))
Text(text = “测试”, modifier = Modifier.heightIn(20.dp,100.dp))
Text(text = “测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试”, modifier = Modifier.heightIn(20.dp,100.dp))
}
}

  • preferredWidthIn(最小宽度,最大宽度) 设置初始最小和最大宽度
  • preferredHeightIn(最小高度,最大高度) 设置初始最小和最大高度

@Preview()
@Composable
fun preferredTest(){
Column(modifier = Modifier
.size(300.dp)
.background(Color.Red)){
Text(text = “测试测试”, modifier = Modifier.preferredSizeIn(40.dp,40.dp,100.dp,100.dp))
Text(text = “测试测试,测试测试,测试测试”, modifier = Modifier.preferredSizeIn(40.dp,40.dp,100.dp,100.dp))
Text(text = “测试”, modifier = Modifier.preferredWidthIn(20.dp,100.dp))
Text(text = “测试,测试,测试”, modifier = Modifier.preferredWidthIn(20.dp,100.dp))
Text(text = “测试”, modifier = Modifier.preferredHeightIn(20.dp,100.dp))
Text(text = “测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试,测试”, modifier = Modifier.preferredHeightIn(20.dp,100.dp))
}
}

@Composable
fun MatchParentSizeComposable() {
Box {
Spacer(Modifier.matchParentSize().background(Color.Green))
Text(“Hello World”)
}
}

@Preview()
@Composable
fun paddingFromBaseLineTest(){
Box(Modifier.background(Color.Yellow)) {
Text(text = “Hi there”,Modifier.paddingFromBaseline(top = 40.dp,bottom = 20.dp))
}
}

  • offset(x,y) 设置偏移量. x是相对于x轴上的偏移,y是相对于y轴上的偏移。
  • absoluteOffset(x,y)设置偏移量

@Preview()
@Composable
fun offsetTest(){
Column(Modifier.background(Color.Yellow).size(width = 150.dp, height = 70.dp)) {
Text(text = “Hi here”,Modifier.offset(x=10.dp,y = 20.dp))
Text(text = “Hi here two”,Modifier.absoluteOffset(x=10.dp,y = 20.dp))
}
}

offset 修饰符根据布局方向水平应用。在从左到右的上下文中,正 offset 会将元素向右移,而在从右到左的上下文中,它会将元素向左移,如果您需要设置偏移量,而不考虑布局方向,请参阅 absoluteOffset 修饰符,其中,正偏移值始终将元素向右移

@Preview()
@Composable
fun alignTest() {
Row(Modifier.width(210.dp).height(100.dp)) {
Box(Modifier.align(alignment = Alignment.CenterVertically).width(20.dp).height(50.dp).background(Color.Blue))
}
}

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

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

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

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

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

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

最后

在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img
汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中…(img-oXV4Q7ck-1712649545656)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-9wA4J5VY-1712649545656)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值