链式布局是约束布局常用的另一个强大功能,可以快速实现等分布局等,还可以实现类似LinearLayout布局的weight比重功能。
约束链具有三种模式:
- spread:view之间均匀分布
- spread_inside:除了约束链的头部和尾部贴在两边,其余均匀分布
- packed:所有view紧贴在一起,默认居中
(gif是在medium上看到的,原链接一下子没找到)
4.1 构建约束链
约束链具有水平方向和垂直方向的。
将多个view构建成一个水平方向的链,则需要多个view在水平方向上两两约束
这就建成了一条水平线上的约束链。垂直方向上的也类似,保持view 之间在垂直方向上两两约束即可。
4.2 改变链的模式
链的第一个view,即img1,称为链头。在链头上设置app:layout_constraintHorizontal_chainStyle
或app:layout_constraintVertical_chainStyle
可分别设置水平或垂直链的模式。
- spread(默认):
app:layout_constraintVertical_chainStyle=“spread”
- spread_inside:
- packed:
4.3 在链上设置权重(weight)
app:layout_constraintHorizontal_weight
/app:layout_constraintVertical_weight
分别设置水平和垂直链上的权重
注意:要使其生效,必须将大小指定为0dp
<ImageView
android:id=“@+id/img1”
android:layout_width=“0dp”
android:layout_height=“100dp”
app:layout_constraintHorizontal_weight=“1”
…
/>
<ImageView
android:id=“@+id/img2”
android:layout_width=“0dp”
android:layout_height=“100dp”
app:layout_constraintHorizontal_weight=“2”
…
/>
<ImageView
android:id=“@+id/img3”
android:layout_width=“0dp”
android:layout_height=“100dp”
app:layout_constraintHorizontal_weight=“2”
…
/>
五 圆形布局
约束布局还提供一种炫酷的圆形布局:可以以角度和距离约束某个view中心相对于另一个view的中心。
实际开发没怎么用过,实现类似钟表效果就很不错。
-
app:layout_constraintCircle
: 圆心,值是某个view的id -
app:layout_constraintCircleRadius
: 半径 -
app:layout_constraintCircleAngle
:角度,值是从0-360,0是指整上方
六 辅助组件
约束布局还提供了一系列组件使得可以更灵活地布局。如Group可以同时控制一堆view的可见性,GuideLine可以虚拟一条辅助线等等。
6.1 Group:控制可见性
Group是一个虚拟视图,可以通过把viewapp:constraint_referenced_ids
放到里面,统一同时控制这些view的可见性。
<androidx.constraintlayout.widget.Group
android:id=“@+id/mGroup”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
app:constraint_referenced_ids=“img1,img2”
/>
Group也是继承自view的,直接在代码中像普通view一样设置可见性,就能同时控制到img1,img2的可见性了。
mGroup.visibility = View.VISIBLE
6.2 Guideline:辅助线
Guideline相当于一条虚拟辅助线,可分为水平、垂直线,帮助定位的。
考虑一个需求,两个view,要在屏幕中间一左一右,若是传统定位,就弄一个线性布局放两个view,然后再把这个线性布局居中。使用约束布局,可以在屏幕正中间放一条虚拟垂直辅助线,然后两个view分别放在这条线左右即可。
android:orientation
设置垂直还是水平app:layout_constraintGuide_percent
通过百分比设置位置,取值可以是0f-1.0f或0%-100%app:layout_constraintGuide_begin
设置相对start/top的偏移量,dpapp:layout_constraintGuide_end
设置相对end/bottom的偏移量,dp
<androidx.constraintlayout.widget.Guideline
android:id=“@+id/guideline”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:orientation=“vertical”
app:layout_constraintGuide_percent=“0.5”
/>
6.3 Barrier:获取边界范围
Barrier可以获取多个约束view的边界。可以获得所包含的多个view的最左最右等边界。
考虑这样一个需求,左边是text1和text2,另外有一个view,必须放在这两个text的右边
因为img1只能有一个描点,所以以text1为约束点。但text1、text2宽度时动态的,当text2文本过长时,会发生遮挡。
此时barrier就派上用场了,它可以动态获取text1、text2的最右侧,这样只要img1依赖改为Barrier的最右侧,就可以解决问题了
app:barrierDirection
,取值有top、bottom、left、right、start、end,用于设置获取的是哪侧,比如上面的例子,获取的是最右侧start/right。app:constraint_referenced_ids
设置需要包含的view的id
…
<androidx.constraintlayout.widget.Barrier
android:id=“@+id/barrier”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
app:constraint_referenced_ids=“text1,text2”
app:barrierDirection=“end”
/>
…
未完待续…
约束布局2.0增加了Layer、State、Flow等高效率组件。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://i-blog.csdnimg.cn/blog_migrate/5a1b5319c2534095cf3326c3497e2276.jpeg)
总结
其实客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
然而Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
[外链图片转存中…(img-2EYlzAct-1711748322307)]
[外链图片转存中…(img-glqwiCyq-1711748322307)]
然而Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!