- 简介
ConstraintLayout 与 RelativeLayout 类似,采用相对定位的布局模式,主要是为了解决布局嵌套过多的问题而出现,以灵活的方式定位和调整小部件。其灵活性高于 RelativeLayout,可以按照比例约束控件位置和尺寸,能够更好地适配屏幕大小不同的机型。从 Android Studio 2.3起,官方的模板默认使用 ConstraintLayout(在 API 9 以上的 Android 操作系统使用它)。
- 常用属性
- 相对定位
<TextView
android:id="@+id/textView1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView2"
app:layout_constraintLeft_toRightOf="@id/textView1"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView3"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/textView1" />
2、基线定位
当两个 TextView 控件的高度不一致,但想要它俩的文本内容对齐,这个时候就可以使用 layout_constraintBaseline_toBaselineOf 属性
<TextView
android:id="@+id/textView1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView2"
app:layout_constraintBaseline_toBaselineOf="@id/textView1"
app:layout_constraintLeft_toRightOf="@id/textView1" />
3、角度定位
可以用一个角度和一段距离来约束一个控件相对于另一个控件的位置。
<TextView
android:id="@+id/textView1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
app:layout_constraintBottom_toTopOf="parent"
app:layout_constraintCircle="@id/textView1"
app:layout_constraintCircleAngle="120"
app:layout_constraintCircleRadius="220dp"
app:layout_constraintLeft_toRightOf="@id/textView1" />
4、边距定位
在 ConstraintLayout 中,可以使用 layout_margin 及其子属性进行边距定位,但必须先约束相应控件在 ConstraintLayout 里的位置,否则将不生效(margin 属性只对其相约束的 View 起作用)。
5、链定位
ConstraintLayout 中的控件的排列方式就像一条铁链,铁链中的每一环是一个控件。控件通过下图所示的方式约束在一起,可以认为他们是一条链(图为横向的链,纵向同理)。
<TextView
android:id="@+id/textView1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/textView2"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView2"
app:layout_constraintLeft_toRightOf="@+id/textView1"
app:layout_constraintRight_toLeftOf="@+id/textView3"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView3"
app:layout_constraintLeft_toRightOf="@+id/textView2"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />