最全Android 约束布局(ConstraintLayout)详解,2024年最新面试让分享一件趣事

总结

算法知识点繁多,企业考察的题目千变万化,面对越来越近的“金九银十”,我给大家准备好了一套比较完善的学习方法,希望能帮助大家在有限的时间里尽可能系统快速的恶补算法,通过高效的学习来提高大家面试中算法模块的通过率。

这一套学习资料既有文字档也有视频,里面不仅仅有关键知识点的整理,还有案例的算法相关部分的讲解,可以帮助大家更好更全面的进行学习,二者搭配起来学习效果会更好。

部分资料展示:




有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。

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

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

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

XML 布局:

添加完约束了,如果要删除指定的单个约束的话,单击变红的圆圈即可:

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

或者是上面提到了,删除指定控件的所有约束。

或者是工具栏中的,删除页面所有的约束:

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

基线约束

基线约束的作用就是将视图的文本基线与另一个视图的文本基线对齐:

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

添加完成后,在 XML 布局中,B 控件就会多出这么一个属性:

app:layout_constraintBaseline_toBaselineOf=“@+id/a”

该属性就是用于基线对齐的。

Chains

Chains(链)是一种特定的约束,一个链包含了多个视图,它允许链中的视图共享空间,并控制可用空间在它们之间如何分配。该效果与 LinearLayoutWeiget 类似,但是链的作用远远超过它。

我们要是想创建一个链,那么首先就需要创建多个视图控件,然后再选择是创建「水平链」还是「垂直链」。 让我们从三个视图中创建一个「水平链」:

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

「垂直链」:

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

以「水平链」为例,我们来看看它们的样子:

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

可以发现,两侧控件的约束样子和前面约束的样子是一样的,我把它称之为「单约束」,也就是两侧控件只是单方面的约束了对方(这里是父控件)。

而中间的控件,两侧的约束则是链条的样子,这表示它约束了左右侧控件,而左右侧控件同样也约束了它:「互相约束」。

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”

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

使用和 LinearLayoutWeiget 一致,很好理解。

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

如:

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

参数是一个浮点值:“宽度:高度”,在该例子中,表示的宽高比是 3:1,也就是高度是宽度的三分之一。

当我们的宽高都设置为 0dp 时,如:

此时,该视图是不会显示的,虽然我们加了 leftrigth 约束到父控件,让它知道了它的宽度就是父控件的高度,但是此时它还并不知道自己有多高。

所以此时我们在添加 ration 时,则可以指示哪一方应该受到约束,方法是在比率前面添加字母 W(用于限制宽度)或 H(用于限制高度),用逗号分隔:

app:layout_constraintDimensionRatio=“h, 3:1”

总结

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的Android开发中高级必知必会核心笔记,共计2968页PDF、58w字,囊括Android开发648个知识点,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。

虽然面试失败了,但我也不会放弃入职字节跳动的决心的!建议大家面试之前都要有充分的准备,顺顺利利的拿到自己心仪的offer。

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

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

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

虽然面试失败了,但我也不会放弃入职字节跳动的决心的!建议大家面试之前都要有充分的准备,顺顺利利的拿到自己心仪的offer。

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

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

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

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值