Android 约束布局(ConstraintLayout)详解
基线约束
基线约束的作用就是将视图的文本基线与另一个视图的文本基线对齐:
添加完成后,在 XML 布局中,B 控件就会多出这么一个属性:
app:layout_constraintBaseline_toBaselineOf=“@+id/a”
该属性就是用于基线对齐的。
Chains
Chains(链)是一种特定的约束,一个链包含了多个视图,它允许链中的视图共享空间,并控制可用空间在它们之间如何分配。该效果与 LinearLayout 的 Weiget 类似,但是链的作用远远超过它。
我们要是想创建一个链,那么首先就需要创建多个视图控件,然后再选择是创建「水平链」还是「垂直链」。 让我们从三个视图中创建一个「水平链」:
「垂直链」:
以「水平链」为例,我们来看看它们的样子:
可以发现,两侧控件的约束样子和前面约束的样子是一样的,我把它称之为「单约束」,也就是两侧控件只是单方面的约束了对方(这里是父控件)。
而中间的控件,两侧的约束则是链条的样子,这表示它约束了左右侧控件,而左右侧控件同样也约束了它:「互相约束」。
在 XML 布局中,是通过如下属性实现的:
我们刚刚创建好了一条链,此时我们可以设置 Cycle Chain Mode(链式模式)来告诉 Chains:“你应该怎样去填充剩余的空间”。
在「蓝图」中,设置的方式是点击链条的小图标:
在「布局」中,设置的属性是:
layout_constraintHorizontal_chainStyle
layout_constraintVertical_chainStyle
分别对应着「水平链」和「垂直链」。
有三种可选的参数:
- spread:将可用空间以均匀分布的方式将视图放置在链中(默认模式):
- spread_inside:将链中最外面的视图对齐到外边缘,然后在可用空间内均匀的放置链中的其他视图:
- packed:将链中的视图紧紧的放在一起(可以提供边距让其分开),然后让其居中在可用空间内:
除了上面说的之外,Chains 还能对链中单独的视图控件设置 Weiget。因为目前并不支持在编辑器当中设置 Weiget,所以我们只能在布局中进行设置了,设置的属性是:
layout_constraintHorizontal_weight
layout_constraintVertical_weight
我们现在将第一个 Button 填充完剩余的空间,在该 Buttton 上设置如下属性:
android:layout_width=“0dp”
app:layout_constraintHorizontal_weight=“1”
使用和 LinearLayout 的 Weiget 一致,很好理解。
Properties
基本的添加、删除约束我们已经掌握了,那么现在再来将目光转向右侧的 Properties 区域。
该区域分为了上下两个部分,下部分就是选中控件的一些属性什么的,很好理解。
重点来看看上半部分,该部分被称为:Inspector 区域。
首先来看这些数字,很明显就是当前控件的 margin 值,我们可以直接在上面进行修改:
还有就是左边和下边的两个轴,我把它称之为纵横轴。作用是用于确定控件位置的:
根据上图可以看到,因为该控件同时添加了水平和垂直约束,所以两条轴都可以进行操作。 轴上面的数字是比例,对应的属性如下:
app:layout_constraintVertical_bias=“0.5”
app:layout_constraintHorizontal_bias=“0.5”
再来看看中心区域:
四条边的原点就是添加的约束,点击的作用是删除该约束。
重要的是中心的 >>>,这个代表了当前控件的宽高计算方式。点击是可以切换的,一共有三种:
:这个代表的就是 wrap_content,不用过多解释了。
:这个就是指定宽高的大小。
:这个代表的是:Match Constraints(有点类似于 match_parent),就给强翻成约束匹配吧… 这个是 ConstraintLayout 特有的,它会尽可能扩展以满足各方的约束(在考虑视图边界之后)。但是,可以使用以下属性和值修改该行为(只有在将视图宽度设置为与约束匹配时,这些属性才会生效):
- layout_constraintWidth_default:
- spread:这是默认的行为,它会尽可能的扩展视图来满足约束。
- wrap:与上面所说的 wrap_content 不同的是,虽然都是适应内容,但仍然允许视图比约束要求的视图更小。
- layout_constraintWidth_min:指定视图的最小宽度(dp)。
- layout_constraintWidth_max:指定视图的最大宽度(dp)。
下面来几个例子,演示下约束匹配的效果,比如说,要让一个 Button 宽度填充满,仅需要将宽度设置为 0dp 即可:
android:layout_width=“0dp”
如果是两个 Button:
效果:
设置宽高比例
当宽高至少有一项设置为 0dp 时(也就是 Match Constraints),那么我们就可以为该视图设置宽高比例。设置的属性是:
layout_constraintDimensionRatio
如:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
总结
其实要轻松掌握很简单,要点就两个:
- 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
- 多练。 (视频优势是互动感强,容易集中注意力)
你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
以上就是总结的关于在面试的一些总结,希望对大家能有些帮助,除了这些面试中需要注意的问题,当然最重要的就是刷题了,这里放上我之前整理的一份超全的面试专题PDF,大家有兴趣的可以自行领取或者私信我:
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】点击:Android架构视频+BAT面试专题PDF+学习笔记即可获取!查看免费领取方式!
构技术进阶脑图、Android开发面试专题资料**,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】点击:Android架构视频+BAT面试专题PDF+学习笔记即可获取!查看免费领取方式!
[外链图片转存中…(img-nS2XbDm3-1710503632050)]
这里只是整理出来的部分面试题,后续会持续更新,希望通过这些高级面试题能够降低面试Android岗位的门槛,让更多的Android工程师理解Android系统,掌握Android系统。喜欢的话麻烦点击一个喜欢在关注一下~
- packed:将链中的视图紧紧的放在一起(可以提供边距让其分开),然后让其居中在可用空间内:
- spread_inside:将链中最外面的视图对齐到外边缘,然后在可用空间内均匀的放置链中的其他视图: