当前位置:   article > 正文

2024年安卓最新一个例子学会使用Jetpack Compose Modifier,android插件化面试_android composable modifier

android composable modifier

最后

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

下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节

整理不易,望各位看官老爷点个关注转发,谢谢!祝大家都能得到自己心仪工作。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

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

.padding(8.dp) //外间隙

.border(1.dp, Color.LightGray, RoundedCornerShape(4.dp))

.padding(8.dp) //内间隙

) {

}

}

复制代码

如上,我们对Item整体添加Padding。 border前后各有一个padding,分别表示对外和对内的间距。相对于传统布局有MarginPadding区分,Modifier中只有padding,根据调用链中的位置不同发挥不同作用,使用更加简单。

Modifier.border

border用来定义边框,RoundedCornerShape是一个Shape类型,用来指定边框的形状为圆角矩形。

我们还可以调用两次background来实现border的效果:

modifier = Modifier

.background(Color.LightGray)

.padding(1.dp) //两个backgound之间形成边框

.background(Color.White)

复制代码

Modifier.preferredHeight / Modifier.preferredHeightIn

preferedXXX等用来设置初始的size,例如preferedHeight可以设置Composable的默认高度,这个值可能被其他约束覆盖,若想要高度不被覆盖,就使用Modifier.height设置固定值

本例中使用preferedHeightIn,可以设置minHeightmaxHeight

Modifier.fillMaxWidth

fillMaxWidth表示填充整个父容器,相当于传统布局的match_parent

3.2 参数中传入Modifier


填充Row中的内容,从左往右依次是,头像、文字、按钮

@Composable

fun Decorated() {

Row(

modifier = Modifier

.fillMaxWidth()

.preferredHeight(64.dp)

.padding(8.dp)

.border(1.dp, Color.LightGray, RoundedCornerShape(4.dp))

.padding(8.dp)

) {

Avatar( //头像部分

modifier = Modifier

.padding(4.dp)

.align(Alignment.CenterVertically)

)

Info( //文字部分

Modifier

.weight(1f)

.align(Alignment.CenterVertically)

)

FollowBtn( //按钮

Modifier.align(Alignment.CenterVertically)

)

}

}

复制代码

我们将具体实现抽成独立的Composable,在Row中调用并传入Modifier。

在Compose中定义Composable时,为Modifier预留参数位置是一个好习惯

Modifier为调用方提供了修改子元素样式的机会,但更重要的是有一些操作符只能在外部调用。

Modifier.align

Modifier的操作符都是扩展函数,并不是定义在一起。操作符定义在不同的空间中,可以限制某些操作符只能在特定父Comopsable中使用,避免误用。

interface RowScope {

fun Modifier.align(alignment: Alignment.Vertical)

}

复制代码

如上,align只能在Row中调用,用来设置子元素在垂直方向如何对齐。子元素不关心其在父容器中如何对齐,因此在外部设置align(Alignment.CenterVertically)后,传给子元素继续使用。

Modifier.weight

weight同样只能在Row中调用,为子元素分配在Row中的占比,类似于LinearLayoutlayout_weight。本例中让中间的文字部分占据所有所有空间

3.3 头像图片


我们对头像图片做圆形处理并添加边框,提升整体视觉效果。

@Composable

fun Avatar(modifier: Modifier) {

Image(

modifier = modifier

.size(50.dp)

.clip(CircleShape)

.border(

shape = CircleShape,

border = BorderStroke(

width = 2.dp,

brush = Brush.linearGradient(

colors = listOf(blue, teal200, green200, orange),

start = Offset( 0f, 0f),

end = Offset(100f,100f)

)

)

)

.border(

shape = CircleShape,

border = BorderStroke(4.dp, SolidColor(Color.White))

),

bitmap = imageResource(id = R.drawable.miku),

contentDescription = null, // decorative

)

}

复制代码

Modifier.size

首先size(50.dp) 设置图片的整体大小

Modifier.clip

clip用来将图片裁剪成指定形状,例子中clip(CircleShape)将图片裁剪成圆形

Modifier.border调用顺序

图片的边框由两部分组成,外层带颜色的部分,和内层的白色边框,因此调用链中出现了两个border()。两个border的调用顺序需要特备注意,border表示为后面的调用添加边框,所以在前面调用的后生效。所以例子中的border调用顺序如下:

Modifier

.border() //2dp 颜色边框

.border() //4dp 白色边框

复制代码

BorderStroke & Brush

border使用BorderStroke填充边框颜色。

外边框使用Brush.linearGradient填充多种颜色组成的渐变色,startend表示颜色范围

BroderStroke(

brush = Brush.linearGradient(

colors = listOf(blue, teal200, green200, orange),

start = Offset( 0f, 0f),

end = Offset(100f,100f)

)

)

复制代码

内边框使用SolidColor填充固定颜色

BorderStroke(brush = SolidColor(Color.White))

复制代码

3.4 文字部分


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nCGBUnXh-1614065317977)(https://upload-images.jianshu.io/upload_images/25361406-82609deb187bf612.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

@Composable

fun Info(modifier: Modifier) {

Column(modifier = modifier) {

Text(

text = name,

color = Color.Black,

maxLines = 1,

style = TextStyle(

fontWeight = FontWeight.Bold,

fontSize = 16.sp,

letterSpacing = 0.15.sp

)

)

Text(

text = desc,

color = Color.Black.copy(alpha = 0.75f),

maxLines = 1,

style = TextStyle( // here

fontWeight = FontWeight.Normal,

fontSize = 14.sp,

letterSpacing = 0.25.sp

)

)

}

}

复制代码

许多字体的样式不借助Modifier,而是通过Text自身的属性以及TextStyle设置

文字颜色

color设置文字颜色,Compose的Color类功能强大, 例如这里可以设置透明度:Color.Black.copy(alpha = 0.75f)

TextStyle

TextStyle可以设置字体、字号等,例子中通过fontWeight设置了粗体

textDecoration

虽然本例中没有使用,但是Text还有一个重要属性textDecoration,对文字进行更有针对性的“装饰”,例如添加下划线、删除线等

textDecoration = TextDecoration.Underline

复制代码

最后

针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!

  • Android前沿技术大纲

  • 全套体系化高级架构视频

Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、混合式开发(ReactNative+Weex)全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

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

在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!

  • Android前沿技术大纲

    [外链图片转存中…(img-0lTuodAH-1715820301106)]

  • 全套体系化高级架构视频

    [外链图片转存中…(img-4qh7nXDv-1715820301107)]

Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、混合式开发(ReactNative+Weex)全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号