在 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
最后
由于文章篇幅原因,我只把面试题列了出来,详细的答案,我整理成了一份PDF文档,这份文档还包括了还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 ,帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
份文档还包括了还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 ,帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!