ConstraintLayout1.1新特性整理

2018-05-09  本文已影响0人  suikaJY

这里也包括一些老特性,源自官方文档。自己写了Demo进行整理

MATCH_CONSTRAINT

其实就是0dp,在这个模式下宽高都是由约束决定的。可以设置约束计算后的最小或者最大宽高,有四个xml属性:

  1. layout_constraintWidth_min
  2. layout_constraintHeight_min
  3. layout_constraintWidth_max
  4. layout_constraintHeight_max
    可以设置约束计算后的百分比宽高,这里的百分比相对于父布局
  5. layout_constraintWidth_percent
  6. layout_constraintHeight_percent
    layout_constraintWidth_min这类属性可以指定为dp,也可以写成wrap,这将会和wrap_content有相同作用

ConstraintSet

定义一组约束(下称约束集),定义时有如下特性:

  1. 指定约束集的约束布局中的所有子控件都要有id,不然会崩,提示你有控件没有指定id
  2. 如果要从约束集1切换到约束集2,那么约束集1中id和约束集2中id相同的控件的约束属性会变成约束集2中定义的
  3. 如果约束集1和约束集2中有不相同的控件id,那么在切换时只在对应(有那个控件id)的约束集中生效
    例如:约束集1中有id为tv1,然后btn1的左边依赖tv1的左边,而约束集2没有tv1,那么切换到约束集2时btn1的lefttoleft就会置为unset(就相当于没有设置左对左约束)。如果约束集2有tv1或者btn1的左侧依赖tv2的左侧,相对位置依赖tv1的约束(lefttoleft)就会被覆盖
  4. 切换约束集时当前布局的所有控件id不变,仅仅将另一个约束集的约束规则应用到当前约束布局上。也就是说只改变位置,大小等,View的对象是没有变的,之前设置过得ClickListener都依然生效
    相关语法:
  5. 创建:clone()
  1. 切换约束集:applyTo()
  1. 在xml中引用约束集:app:constraintSet="@layout/layout_con_set3"
  1. 代码中动态修改约束集中的约束:通过获取ConstraintSet的对象,可以在代码中动态改变约束属性。这样就不用像RelativeLayout一样通过LayoutParam进行修改了。操作方式类似于BRVAH框架的BaseViewHolder,都是给一个id然后给一些属性。

Group

通过id引用当前约束布局中的空间,然后统一控制这些控件的visiblity属性。本身也是一个View,但不可见,属于界面控制型View。通过设置这个View引用的setVisibility方法也可以更改组中的控件的显示和隐藏。引用id的写法为app:constraint_referenced_ids="button4,button9"

Guideline

这个View在1.0就有。但1.0的时候我没有看过这个View,所以这里也整理进来了。这个View是没有任何展示效果的,只是用来定义一个水平或竖直方向上的位置,然后让其他View

  1. 方向:
  1. 位置:
  1. 代码中动态设置位置:

Barrier(屏障)

这个约束控件和Guideline作用是很相似的也是一条线,但Guideline是“封建”的,而Barrier是“民主”的。Guideline生来就有位置,然后别的控件照着它的位置部署位置。Barrier的位置由它所引用的控件决定,然后再让其他控件根据他的位置来改变位置。
主要有三个属性:

  1. app:constraint_referenced_ids:它遵从的控件id集合,如:"btn1,btn2",就指示这个屏障是在哪组控件的最边缘
  2. app:barrierAllowsGoneWidgets:是否听从引用控件中GONE掉的控件。
  1. app:barrierDirection:枚举,一共六个。上下左右和start与end。

Placeholder

本身也是一个View,默认情况下处于INVISIVBLE状态。它的作用就是指示一个指定位置(或者说一套约束),后续可能有View会移动到它的位置(将约束变成Placeholder的约束)。这个View在XML中的写法和最普通的View是一样的只是默认不显示出来。

测试Demo链接:https://github.com/z2058550226/ConstraintLayoutDemo

上一篇下一篇

猜你喜欢

热点阅读