赞
踩
其实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
,分别表示对外和对内的间距。相对于传统布局有Margin
和Padding
区分,Modifier中只有padding
,根据调用链中的位置不同发挥不同作用,使用更加简单。
border
用来定义边框,RoundedCornerShape
是一个Shape类型,用来指定边框的形状为圆角矩形。
我们还可以调用两次background
来实现border的效果:
modifier = Modifier
.background(Color.LightGray)
.padding(1.dp) //两个backgound之间形成边框
.background(Color.White)
复制代码
preferedXXX
等用来设置初始的size
,例如preferedHeight
可以设置Composable的默认高度,这个值可能被其他约束覆盖,若想要高度不被覆盖,就使用Modifier.height
设置固定值
本例中使用preferedHeightIn
,可以设置minHeight
和maxHeight
。
fillMaxWidth
表示填充整个父容器,相当于传统布局的match_parent
填充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的操作符都是扩展函数,并不是定义在一起。操作符定义在不同的空间中,可以限制某些操作符只能在特定父Comopsable中使用,避免误用。
interface RowScope {
fun Modifier.align(alignment: Alignment.Vertical)
}
复制代码
如上,align
只能在Row中调用,用来设置子元素在垂直方向如何对齐。子元素不关心其在父容器中如何对齐,因此在外部设置align(Alignment.CenterVertically)
后,传给子元素继续使用。
weight
同样只能在Row中调用,为子元素分配在Row中的占比,类似于LinearLayout
的layout_weight
。本例中让中间的文字部分占据所有所有空间
我们对头像图片做圆形处理并添加边框,提升整体视觉效果。
@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
)
}
复制代码
首先size(50.dp)
设置图片的整体大小
clip
用来将图片裁剪成指定形状,例子中clip(CircleShape)
将图片裁剪成圆形
图片的边框由两部分组成,外层带颜色的部分,和内层的白色边框,因此调用链中出现了两个border()
。两个border的调用顺序需要特备注意,border表示为后面的调用添加边框,所以在前面调用的后生效。所以例子中的border调用顺序如下:
Modifier
.border() //2dp 颜色边框
.border() //4dp 白色边框
复制代码
border使用BorderStroke
填充边框颜色。
外边框使用Brush.linearGradient
填充多种颜色组成的渐变色,start
和end
表示颜色范围
BroderStroke(
brush = Brush.linearGradient(
colors = listOf(blue, teal200, green200, orange),
start = Offset( 0f, 0f),
end = Offset(100f,100f)
)
)
复制代码
内边框使用SolidColor
填充固定颜色
BorderStroke(brush = SolidColor(Color.White))
复制代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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可以设置字体、字号等,例子中通过fontWeight
设置了粗体
虽然本例中没有使用,但是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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。