约束布局:最少给一个控件两条边设置属性才能固定住控件
1.控件在左上角:控件的左边对父容器的左边,控件的上边对父容器的上边
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent"
或
app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"
left---对应--start
right---对应---end
控件在父容器中间:
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent"
2. Guideline辅助控件---辅助线(宽高任意设置)
<androidx.constraintlayout.widget.Guideline android:layout_width="0dp" android:layout_height="0dp" android:orientation="horizontal" app:layout_constraintGuide_end="110dp" />
水平线,layout_constraintGuide_end距离底部110dp
layout_constraintGuide_begin="110dp"距离顶部110dp
<androidx.constraintlayout.widget.Guideline android:layout_width="0dp" android:layout_height="0dp" android:orientation="vertical" app:layout_constraintGuide_begin="110dp" />
垂直线,layout_constraintGuide_begin距离左边110
layout_constraintGuide_end距离右边110
<androidx.constraintlayout.widget.Guideline android:layout_width="0dp" android:layout_height="0dp" android:orientation="vertical" app:layout_constraintGuide_percent="0.5"/>
app:layout_constraintGuide_percent="0.5" 值为0-1之间的小数
3.辅助控件Barrier控件
属性:barrierDirection 设置屏障位置
constraint_referenced_ids 加入的控件
app:barrierDirection="right" app:constraint_referenced_ids="textview1,textview2"
4. 文本基线 layout_constraintBaseline_toBaselineOf="@id/tv_name"
两个 TextView 的高度不一致,但是又希望他们文本基线对齐,这个时候就可以使用
5. 尺寸约束
使用 wrap_content,让控件自己计算大小
当控件的高度或宽度为 wrap_content 时,可以使用下列属性来控制最大、最小的高度或宽度:
android:minWidth 最小的宽度
android:minHeight 最小的高度
android:maxWidth 最大的宽度
android:maxHeight 最大的高度
6.官方不推荐在 ConstraintLayout 中使用 match_parent,可以设置 宽或高为0dp 配合约束代替 match_parent
<TextView android:layout_width="0dp" android:layout_height="wrap_content" android:text="CBD0" android:gravity="center" android:textSize="30sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"/>
7.偏移属性bias 取值大于等于0 小于等于1
注意:锚点相同,bias设置无效
<TextView android:id="@+id/TextView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="简单爱" android:background="@color/teal_700" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"/>
8.Placeholder 指的是占位符,给Placeholder控件设置content可以使别的控件移动到此控件上
<androidx.constraintlayout.widget.Placeholder android:id="@+id/placeholder" android:layout_width="wrap_content" android:layout_height="wrap_content" app:content="@+id/textview" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#cccccc" android:padding="16dp" android:text="TextView" android:textColor="#000000" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" />
9.Group 可以把多个控件同时隐藏或显示
<androidx.constraintlayout.widget.Group android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="invisible" app:constraint_referenced_ids="textview1,textview2"/>
10.链
如果两个或以上控件通过下图的方式约束在一起,就可以认为是他们是一条链
纵向原理也是这样
注意:两端要与parent约束
一条链的第一个控件是链头,在这个控件里设置
layout_constraintHorizontal_chainStyle
可以改变整条链的样式
给链设置权重
layout_constraintHorizontal_weight
将宽度设置为0dp,然后给控件添加权重属性
11.角度约束
<TextView android:layout_width="100dp" android:layout_height="50dp" android:background="#E3C97D" app:layout_constraintCircle="@id/tv" app:layout_constraintCircleAngle="120" app:layout_constraintCircleRadius="150dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"/>
layout_constraintCircle圆心
layout_constraintCircleAngle角度
layout_constraintCircleRadius半径
12.比例宽高
layout_constraintDimensionRatio="2:1"
ConstraintLayout
中可以对宽高设置比例,前提是宽或高其中一个设置为0dp
,这样比例才会生效