一. 背景
当前手机APP项目中,有些界面比较复杂,导致布局层次很深,View的数量也相当多,对性能产生了一定影响;复杂的布局,同时也增大了代码维护的难度。
ConstraintLayout 正是为了解决这个问题,它支持以下几类强大的特性:
- 相对定位
Margins
中心定位
角度定位
Visibility behavior
尺寸约束
链(Chains)
Virtual Helpers objects
在组合使用这些特性以后,我们可以达到明显降低布局层次的目的。
二. 可行性
- ConstraintLayout 是以一个单独的support library 的形式提供的,他支持API 9以上的版本。
- Android Studio 2.2以上的版本
- 支持将旧的布局文件一键替换为ConstraintLayout,工作量较小(不支持将已有的多个层级的布局直接转换为同一层级);
三. 引入步骤
在module的build.gradle中插入:
dependencies {
...
//引入ConstraintLayout
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
...
}
目前最新版本为1.1.0-beta3
四. 特性详解
1. 相对定位
相对定位是ConstrainLayout中最为经常使用的一项属性,它支持
水平方向:
- left
app:layout_constraintLeft_toLeftOf
app:layout_constraintLeft_toRightOf
- right
app:layout_constraintRight_toLeftOf
app:layout_constraintRight_toRightOf
- start
app:layout_constraintStart_toEndOf
app:layout_constraintStart_toStartOf
- end
app:layout_constraintEnd_toStartOf
app:layout_constraintEnd_toEndOf
竖直方向:
- top
app:layout_constraintTop_toTopOf
app:layout_constraintTop_toBottomOf
- bottom
app:layout_constraintBottom_toTopOf
app:layout_constraintBottom_toBottomOf
- text baseline
app:layout_constraintBaseline_toBaselineOf
这些属性都需要引用到另一个控件,或者parent(指代他们的父容器,也就是ConstraintLayout)
2. Margins
支持设置Margin(仅支持0或正数):
跟其它布局所不同的是,ConstraintLayout还支持链接到Visibility为Gone时的Margin:
layout_goneMarginLeft
layout_goneMarginRight
layout_goneMarginStart
layout_goneMarginEnd
layout_goneMarginTop
layout_goneMarginBottom