【Android】约束布局(ConstraintLayout)使用参考

目录

  1. 尺寸约束
    1. 自身约束
    2. 参照约束
  2. 位置约束
    1. 相对位置
    2. 位置偏向
    3. 辅助线
  3. 链约束(Chain)
  4. 总结

尺寸约束

自身约束

尺寸类型

类型 说明
固定值 android:width="200dp"
wrap_content 按内容自适应
MATCH_CONSTRAINT 宽高0dp,任由约束拉伸

宽高比

在宽或高为MATCH_CONSTRAINT的情况下,保持宽高比:app:layout_constraintDimensionRatio

值类型 说明
w:h 宽高只有一个为MATCH_CONSTRAINT,按比例式约束另一个
x.xx 宽高只有一个为MATCH_CONSTRAINT,按比例值约束另一个
W,1:1 宽高均为0时先约束高度,再用比值约束宽度
H,1:1 宽高均为0时先约束宽度,再用比值约束高度

参照约束

百分比

  1. 相关尺寸约束(水平为宽,垂直为高)设置为MATCH_CONSTRAINT
  2. 启用按父布局百分比约束
    app:layout_constraintWidth_default="percent"
    app:layout_constraintHeight_default="percent"
  3. 设置百分比值([0~1])
    app:layout_constraintWidth_percent="0.5"
    app:layout_constraintHeight_percent="1"

权重链

  1. View彼此约束位置连接成链
  2. 相关尺寸(水平为宽,垂直为高)设置为MATCH_CONSTRAINT
  3. 设置权重
    app:layout_constraintHorizontal_weight=“1.2”
    app:layout_constraintVertical_weight=“2.4”


位置约束

相对位置

设置方向力:app:layout_constraint{自身方向}_to{参照物方向}Of="{参照物}"
其中参照物:parent其他ViewGuideLine

位置偏向

默认居中(0.5),相当于设置lefttop在父容器的初始位置
layout_constraintHorizontal_bias="0.2"
layout_constraintVertical_bias="0.8"


辅助线

GuideLine:只辅助约束,不参与渲染

<android.support.constraint.Guideline
    android:id="@+id/guideline_h"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_percent="0.5"/>
辅助线 说明
辅助线类型 水平horizontal,垂直vertical
固定位置 app:layout_constraintGuide_begin=“10dp”
app:layout_constraintGuide_end=“50dp”
百分比位置 app:layout_constraintGuide_percent=”0.5”


链约束

定义链:View两两相依连接成链
声明类型: 链头控制整条链的类型

  1. app:layout_constraintHorizontal_chainStyle="spread_inside"
  2. app:layout_constraintVertical_chainStyle="packed"
链类型 实现方式 样式
散布式(Spread默认) 相关尺寸不为0 空白均匀散布在View周边
内散式(Spread Inside) 相关尺寸不为0 空白均匀散布在View之间
外散式(Packed) 相关尺寸不为0 空白均匀散布在View两端
外散偏向 相关尺寸不为0
链头View设置偏向
空白不均匀散在View两端
权重链 链中View设置权重 不散布空白


总结

  1. View尺寸可以是固定值,也可以由自身约束(wrap_content,宽高比),也可以根据父容器约束(百分比,权重)
  2. 约束可以理解为一种方向上的拉扯力,这种拉扯力可以拉扯位置,也可以在View的尺寸为MATCH_CONSTRAINT拉伸View的大小
  3. 拉扯力有四个方向,着力点可以是View的边也可以是辅助线,两端都固定在着力点上;
  4. 拉扯力道默认相当,可以通过偏向控制其拉扯位置时候的力的力道

你可能感兴趣的:(Android)