首先,现附上官方文档:ConstraintLayout官方文档
约束布局ConstraintLayout 是一个ViewGroup,可以在Api9以上的Android系统使用它,它的出现主要是为了解决布局嵌套过多的问题,以灵活的方式定位和调整小部件。从 Android Studio 2.3 起,官方的模板默认使用 ConstraintLayout。
然而,ConstraintLayout的出现就是为了解决布局嵌套的问题。在开发过程中经常能遇到一些复杂的UI,可能会出现布局嵌套过多的问题,嵌套得越多,设备绘制视图所需的时间和计算功耗也就越多。
在使用过程中,ConstraintLayout 可以看做是一个更强大的 RelativeLayout,它提供了更多的 API 来约束控件的相对关系,更容易满足复杂的页面布局。
a控件的xx位于b控件的xx
layout_constraintLeft_toLeftOf a控件的左边位于b控件的右边
layout_constraintLeft_toRightOf
layout_constraintRight_toLeftOf
layout_constraintRight_toRightOf
layout_constraintTop_toTopOf
layout_constraintTop_toBottomOf
layout_constraintBottom_toTopOf
layout_constraintBottom_toBottomOf
layout_constraintBaseline_toBaselineOf
文本对齐:两个TextView的高度不一致,但是又希望他们文本对齐
layout_constraintStart_toEndOf
layout_constraintStart_toStartOf
layout_constraintEnd_toStartOf
layout_constraintEnd_toEndOf
控件上下左右居中显示:
app:layout_constraintLeft_toLeftOf="parent”
app:layout_constraintRight_toRightOf=“parent”
app:layout_constraintTop_toTopOf=“parent”
app:layout_constraintBottom_toBottomOf=“parent”
在上述居中的情况下,可以设置偏移量
(0-1)0表示最左,1表示最右
layout_constraintHorizontal_bias 水平偏移
layout_constraintVertical_bias 垂直偏移
可以让一个控件以另一个控件的中心为中心点,来设置其相对与该中心点的距离和角度
1.控件必须在布局里约束一个相对位置
2.margin只能大于等于0
android:layout_marginStart
android:layout_marginEnd
android:layout_marginLeft
android:layout_marginTop
android:layout_marginRight
android:layout_marginBottom
goneMargin主要用于约束的控件可见性被设置为gone的时候使用的margin值,属性如下:
layout_goneMarginStart
layout_goneMarginEnd
layout_goneMarginLeft
layout_goneMarginTop
layout_goneMarginRight
layout_goneMarginBottom
1.使用指定的尺寸
2.使用wrap_content,让控件自己计算大小
当控件的高度或宽度为wrap_content时,可以使用下列属性来控制最大、最小的高度或宽度:
android:minWidth 最小的宽度
android:minHeight 最小的高度
android:maxWidth 最大的宽度
android:maxHeight 最大的高度
注意!当ConstraintLayout为1.1版本以下时,使用这些属性需要加上强制约束,如下所示:
app:constrainedWidth=”true”
app:constrainedHeight=”true”
3.使用 0dp (MATCH_CONSTRAINT)
官方不推荐在ConstraintLayout中使用match_parent,可以设置 0dp
当宽或高至少有一个尺寸被设置为0dp时,app:layout_constraintDimensionRatio=“1:1”
设置控件宽高比
能够在水平或垂直方向控件之间相互约束而组成的一条链就是约束链,约束链是由开头的控件进行属性控制的。没错就是跟着大哥走
app:layout_constraintHorizontal_chainStyle=“xxx”
app:layout_constraintHorizontal_weight=“x”
app:layout_constraintVertical_weight=“x”
当宽度设为0dp,就可以使用水平权重。
当长度设为0dp,就可以使用垂直权重
Group可以把多个控件归为一组,方便隐藏或显示一组控件
<android.support.constraint.Group
android:id="@+id/group"
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:visibility=“invisible” 隐藏但存在在 gone 隐藏不存在
app:constraint_referenced_ids=“TextView1,TextView3” />
Guideline 是约束布局中一个特殊的辅助布局类,可以创建水平或者垂直的参考线,其他的控件可以根据这个参考线来进行布局,它本质是不可见的控件。
参考线的位置属性:
orientation:vertical/horizontal
layout_constraintGuide_begin 指定距离左/上边开始的固定位置
layout_constraintGuide_end 指定距离右/下边开始的固定位置
layout_constraintGuide_percent 指定位于布局中所在的百分比
constraint_referenced_ids 引用多个控件,看作一个整体来添加一个与另外一个控件限制最大宽/高的约束。
通过 app:barrierDirection 属性来决定 Barrier 的方向
设有3个控件ABC,C在AB的右边,但是AB的宽是不固定的,这个时候C无论约束在A的右边或者B的右边都不对。当出现这种情况可以用Barrier来解决。Barrier可以在多个控件的一侧建立一个屏障
<android.support.constraint.Barrier
android:id="@+id/barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="right"
app:constraint_referenced_ids="TextView1,TextView2" />
app:barrierDirection为屏障所在的位置,可设置的值有:bottom、end、left、right、start、top
app:constraint_referenced_ids为屏障引用的控件,可设置多个(用“,”隔开)