最近写新项目,要求复杂的时候最好使用ConstraintLayout,于是正好把新的界面都采用ConstraintLayout来实现来练习下,了解下这个新控件(虽然已经出了2年多了 )
ConstraintLayout 中文一般称为约束布局,个人感受相当于一个升级版的RelativeLayout,之前用RelativeLayout相比LinearLayout等可以减少布局层次,不过对于更复杂的布局却也无能为力还是需要多层嵌套。而ConstraintLayout 中增加了更多确定相对位置的方法,可以大大减少布局层次,提高性能,大部分复杂布局都能改成1~2层的扁平结构。不过还是有很多不同需要学习后才能了解。关于基础的使用方法,网上类似的文章复制来复制去都是那几篇,可以看看了解下基础用法。
这里只记录下一些需要注意的地方。
当前使用的
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
1.layout_marginTop 等方法在设置 layout_constraintTop_toTopOf等约束之前,是不生效的。padding不受影响(前提是没被onstraintTop等方法约束死)
2.关于match_parent ,旧的文章中都提到这个没有了或无效了。在1.1.3中这个版本是有的,而且还是原来的效果,warp_parent 也是同样,想要填充剩余空间的话,还是和LinearLayout中一样设为0dp就可以了,不再需要weight属性了
3.Group 可以用来统一控制 多个view同时显示或隐藏,但是实测无法将其作为一个整体用来做布局约束,仅仅类似一个标记。
4.关于需要设置背景的时候,一般的方法是创建一个view单独设置背景,然后设置其边界约束。
对于原先ViewGroup设有padding的时候,可以有三个方法代替:
- 可以确定背景位置时,固定背景位置,然后view以背景位置作为约束条件,设置margin。
- 只能通过子view来确定背景大小时,将padding设置到子view上,然后背景view以子view来设置边界约束
- 保留viewGroup。。。
ConstraintLayout中background的使用方法
5.在设置链或其他的时候,可能在前方会引用后方的view。一个View的ID在第一次被声明在layout中时需要使用+前缀在资源id前,类似于: @+id/background。