约束布局ConstraintLayout

1、约束布局的出现背景

随着Android手机的普遍,APP已经成为我们日常生活中必不可少的部分,但随着APP不断的更新细化,布局也越来越复杂,更多层次的嵌套,已经成为影响APP性能的一个重要环节,也是我们在开发中不断优化的部分。Google也在为提高APP性能而不断改变着,因此在Android studio的2.3版本新建的Module中默认的布局就是 ConstraintLayout。

ConstraintLayout 是一个 ViewGroup,它的出现是为了解决复杂布局时,布局嵌套(布局内的布局)过多的问题(嵌套布局会增加绘制界面所需的时间)。它可以根据同级视图和父布局的约束条件为每个视图定义位置,类似于 RelativeLayout 所有视图都是根据兄弟视图和父级布局之间的关系来布局的,但是与 RelativeLayout 相比,它更加灵活,更易于使用。

2、约束布局常用属性

layout_constraintTop_toTopOf // 将视图的顶部与另一个视图的顶部对齐。

layout_constraintTop_toBottomOf // 将视图的顶部与另一个视图的底部对齐。

layout_constraintBottom_toTopOf // 将视图的底部与另一个视图的顶部对齐。

layout_constraintBottom_toBottomOf // 将视图的底部与另一个视图的底部对齐。

layout_constraintLeft_toLeftOf // 将视图的左边与另一个视图的左边对齐。

layout_constraintLeft_toRightOf // 将视图的左边与另一个视图的右边对齐。

layout_constraintRight_toLeftOf // 将视图的右边与另一个视图的左边对齐。

layout_constraintRight_toRightOf // 将视图的右边与另一个视图的右边对齐。

layout_constraintStart_toStartOf//将视图的起始位置与另一视图的的起始位置对齐

layout_constraintStart_toEndOf//将视图的起始位置与另一视图的结束位置对齐

layout_constraintEnd_toEndOf//将视图的结束位置与另一视图的结束位置对齐

layout_constraintEnd_toStartOf//将视图的开始位置与另一视图的结束位置对齐

3、参考线(GuideLine)

基线约束的作用就是将视图的文本基线与另一个视图的文本基线对齐,与widget的大小无关。layout_constraintBaseline_toBaselineOf=="@id/a",就是将B控件的文本部分与A控件的文本部分对齐。

4、链(Chains)

如图下图,在一个水平或垂直方向上,一排view两两相互约束,即为链。

链的第一个元素称为链头,可以通过设置layout_constraintHorizontal_chainStyle来者是链的分布方式。

  • spread

    默认模式,分布入上图。

  • spread_inside

    如图,和spread的区别是没算两端的约束

  • packed

所有视图挤在中间

可以看出,链与LinearLayout效果大致一样。和LinearLayout一样,链也可以使用layout_constraintHorizontal_weight,来分割剩余空间。但又和 android:layout_weight不太一样,不一样的地方如下:

  1. layout_weight ,不管当前view的大小设的是多大,都会继续占据剩余空间
  2. layout_constraintHorizontal_weight,这个只对0dp并且layout_constraintWidth_default为spread的view生效,使其大小按比例分割剩余空间,对于已经设定大小的view不生效

5、关于view gone

在相对布局中使用一个控件为基准定位另一个空间的位置后,那么作为基准的view如果在设置为gone时,布局会出现错乱。那么在约束布局中会不会有同样的问题呢?答案是不会,在约束布局中在基准控件设置为gone时,实际效果是该控件的长、高、margin都失效了,控件变为一个点,其他控件可以继续使用它作为锚点。

猜你喜欢

转载自blog.csdn.net/LPL0129/article/details/86580346