Android ConstraintLayout 约束布局 1

链式布局是约束布局常用的另一个强大功能,可以快速实现等分布局等,还可以实现类似LinearLayout布局的weight比重功能。

约束链具有三种模式:

  • spread:view之间均匀分布
  • spread_inside:除了约束链的头部和尾部贴在两边,其余均匀分布
  • packed:所有view紧贴在一起,默认居中

(gif是在medium上看到的,原链接一下子没找到) 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.1 构建约束链

约束链具有水平方向和垂直方向的。

将多个view构建成一个水平方向的链,则需要多个view在水平方向上两两约束

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这就建成了一条水平线上的约束链。垂直方向上的也类似,保持view 之间在垂直方向上两两约束即可。

4.2 改变链的模式

链的第一个view,即img1,称为链头。在链头上设置app:layout_constraintHorizontal_chainStyleapp:layout_constraintVertical_chainStyle可分别设置水平或垂直链的模式。

  1. spread(默认):

app:layout_constraintVertical_chainStyle=“spread”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. spread_inside:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 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的偏移量,dp
  • app: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移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

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

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

总结

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

Android大厂面试真题全套解析

2017-2020字节跳动Android面试真题解析PDF
然而Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

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

[外链图片转存中…(img-2EYlzAct-1711748322307)]

[外链图片转存中…(img-glqwiCyq-1711748322307)]
然而Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值