在 1.1 版本之前,如果将控件的尺寸设置为了 WRAP_CONTENT,那么对控件设置约束(如:minWidth 等)是不起作用的。那么强制约束(Enforcing constraints)的作用就是,在控件被设置 WRAP_CONTENT 的情况下,使约束依然生效。
app:layout_constrainedWidth=”true|false”
app:layout_constrainedHeight=”true|false”
下面的例子演示了没有设置强制约束和设置了强制约束的对比:
如图所示,同样设置了最大宽度,imageViewB起作用,imageViewA没有起作用
MATCH_CONSTRAINT dimensions
此属性在1.1版本添加
当尺寸设置为MATCH_CONSTRAINT(0dp,默认行为是使结果大小占用所有可用空间)时。1.1版本之后,还有几个额外的修饰符:
layout_constraintWidth_min
andlayout_constraintHeight_min
: 指定当前控件的最小宽度或高度layout_constraintWidth_max
andlayout_constraintHeight_max
: 指定当前控件的最大宽度或高度layout_constraintWidth_percent
andlayout_constraintHeight_percent
: 指定当前控件的宽度或高度是父控件的百分之多少。可设置的值在 0 - 1 之间,1 就是 100%
A设置为0dp,所以铺满整个宽度 B加了个50%的百分比,所以宽度为一半 C限制了最大宽度和最小高度 效果如下图
Min and Max:
为min和max指示的值可以是dp,也可以是“wrap”(它将使用与WRAP_CONTENT相同的值)
Percent dimension:
To use percent, you need to set the following:
- The dimension should be set to
MATCH_CONSTRAINT
(0dp)- The default should be set to percent
app:layout_constraintWidth_default="percent"
orapp:layout_constraintHeight_default="percent"
- Then set the
layout_constraintWidth_percent
orlayout_constraintHeight_percent
attributes to a value between 0 and 1
Ratio (比例)
这里的比例指的是宽高比,通过设置比例,让宽高的其中一个随另一个变化。为了实现比例,需要让控件宽或高受约束,且尺寸设置为0dp
(也可以是MATCH_CONSTRAINT
),eg:
上图中,imageViewB的宽度满足受约束且设置为0dp的条件,所以其尺寸会按照比例随高度调整。
比例的设置有两种格式:
- 宽度与高度的比,可理解为
受约束的一方尺寸:另一方尺寸
- 浮点值,表示宽度和高度之间的比率
如果宽高都设置为MATCH_CONSTRAINT(0dp),您也可以使用比率。**在这种情况下,系统设置满足所有约束的最大尺寸并保持指定的纵横比。**要根据另一个的尺寸约束一个特定边,可以预先附加W或H,分别约束宽度或高度。例如,如果一个尺寸受两个目标约束(例如,宽度为0dp并且以父对象为中心)你可以通过在比率前添加字母W(用于约束宽度)或H(用于约束高度)来指示哪一边应该被约束,用逗号分隔 (谷歌翻译)
如上图,imageViewA将按照2:1的宽高比设置按钮的高度,而按钮的宽度将匹配父项的约束(0dp即铺满)
imageViewB将按照1:3的宽高比设置按钮的宽度,而按钮的高度将匹配父项的约束(即铺满imageViewA下面32dp到parent底部)
参考
细细品读!深入浅出,官方文档看ConstraintLayout
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!