1.简介:
constraintLayout和RelativeLayout类似,但比RelativeLayout要强大多,它可以有效地解决布局嵌套过多问题,我们平时编写的界面,复杂的布局总会伴随着多层的嵌套,而嵌套越多,程序的性能也就越差;ConstraintLayout则是使用约束的方式来指定各个控件的位置和关系;
2.常用相对属性:
layout_constraintTop_toTopOf // 将所需视图的顶部与另一个视图的顶部对齐。
layout_constraintTop_toBottomOf // 将所需视图的顶部与另一个视图的底部对齐。
layout_constraintBottom_toTopOf // 将所需视图的底部与另一个视图的顶部对齐。
layout_constraintBottom_toBottomOf // 将所需视图的底部与另一个视图的底部对齐。
layout_constraintLeft_toTopOf // 将所需视图的左侧与另一个视图的顶部对齐。
layout_constraintLeft_toBottomOf // 将所需视图的左侧与另一个视图的底部对齐。
layout_constraintLeft_toLeftOf // 将所需视图的左边与另一个视图的左边对齐。
layout_constraintLeft_toRightOf // 将所需视图的左边与另一个视图的右边对齐。
layout_constraintRight_toTopOf // 将所需视图的右对齐到另一个视图的顶部。
layout_constraintRight_toBottomOf // 将所需视图的右对齐到另一个的底部。
layout_constraintRight_toLeftOf // 将所需视图的右边与另一个视图的左边对齐。
layout_constraintRight_toRightOf // 将所需视图的右边与另一个视图的右边对齐。
layout_constraintBaseline_toBaselineOf :文字底部对齐,与alignBaseLine属性相似
layout_constraintStart_toEndOf :同left_toRightOf
layout_constraintStart_toStartOf :同left_toLeftOf
layout_constraintEnd_toStartOf :同right_toLeftOf
layout_constraintEnd_toEndOf :同right_toRightOf
3.margins属性
android:layout_marginStart
android:layout_marginEnd
android:layout_marginLeft
android:layout_marginTop
android:layout_marginRight
android:layout_marginBottom
4.当前View与另一个View绑定后,另一个View的属性设置为了Gone,则以下属性会生效
layout_goneMarginStart
layout_goneMarginEnd
layout_goneMarginLeft
layout_goneMarginTop
layout_goneMarginRight
layout_goneMarginBottom
5.居中并设置权重,使view居中并且设置权重,同RelativeLayout的center_horizontal/vertical=“true”
设置方法:以横向居中为例(竖向同理):
将ConstraintLayout的子View的属性如下进行设置
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
6.设置权重layout_constraintHorizontal_bias(layout_constraintVertical_bias)
例如:下面将会使左侧用30%的偏差,而不是默认的50%,使得左侧将会缩短,与微件倾斜更靠近左侧
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
app:layout_constraintHorizontal_bias="0.3"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
7.尺寸限制
在ConstraintLayout最小尺寸,被使用ConstraintLayout时,其尺寸设置为WRAP_CONTENT
- android:minWidth 设定的最小宽度为布局
- android:minHeight 设置最低高度布局
注意:
ConstraintLayout 不支持match_parent属性,但支持wrap_content属性。如果你需要用match_parent,将宽度/高度指定为0dp,然后设置left_toleft,right_toRight为parent即可实现横向充满,同理设置竖向的
8.Ratio比例大小属性
You can also define one dimension of a widget as a ratio of the other one. In order to do that, you need to have at least one constrained dimension be set to 0dp (i.e., MATCH_CONSTRAINT), and set the attribute layout_constraintDimentionRatio to a given ratio. For example:
当你的父控件为ConstraintLayout,可以利用这个属性来控制当前View的宽高比。在利用这个属性时,你必须指明一个方向上的大小为0dp,另一个方向可指定为明确的dp值也可以使用wrap_content这样才能够按照比例来为你摆放
例如:“宽度:高度
<Button android:layout_width="wrap_content" android:layout_height="0dp" app:layout_constraintDimensionRatio="1:1" />
也可以这样设置:
<ImageView android:layout_width="0dp" android:layout_height="0dp" android:src="@mipmap/ic_launcher" app:layout_constraintDimensionRatio="H,6:1" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent"/>
把宽和高设置为0dp,但是通过Top_toTopOf、Bottom_toBottomOf指定高度,通过添加字母W(为约束的宽度)或H (用逗号分隔的前方约束的高度);既是高度已经指定大小,宽度按照对应比例分配大小;
9.Chains链
当设置属性layout_constraintHorizontal_chainStyle或layout_constraintVertical_chainStyle一个链的第一个元素上,所述链的行为将根据指定的样式(默认为改变CHAIN_SPREAD)。
CHAIN_SPREAD - 该元素将被传播出去(默认方式)
加权链-在CHAIN_SPREAD模式下,如果一些小部件设置为MATCH_CONSTRAINT,他们将分裂的可用空间
CHAIN_SPREAD_INSIDE - 类似,但链条的终点不会散开
CHAIN_PACKED - 链条的元件将被一起包装。那么孩子的水平或垂直偏置属性会影响包装元件的定位