来源 https://yuweiguocn.github.io/using-the-constraintlayout/
本文介绍了ConstraintLayout的使用。
使用ConstraintLayout可以创建复杂的扁平化View层级的布局。它和RelativeLayout很相似都是通过View之间和父布局的关系摆放所有View的。它比RelativeLayout更灵活并且使用Android Studio的布局编辑器更方便。
ConstraintLayout兼容至Android 2.3 (API level 9)。本文基于Android Studio 2.3环境。
1.在Module的build.gradle
文件中添加仓库依赖:
1
|
repositories {
|
2.在build.gradle
文件中添加依赖:
1
|
dependencies {
|
或者如果你访问google有困难的话,你可以使用https://github.com/paronos/constraint-layout 帮我们提供好的依赖:
1
|
repositories {
|
1.对原有布局我们可以在设计视图右击组件树或预览图,选择转换为ConstraintLayout:
选择转换为ConstraintLayout后Android Studio会有一个如下提示:
提示说明Android Studio会按照现有View位置自动添加约束,你可能还需要调整约束。选择第一个选项,它会移除所有的嵌套布局。第二个选项是不移除带有ID属性的嵌套布局,因为有可能会在Java代码中引用。
2.创建新布局根元素选择android.support.constraint.ConstraintLayout
。
从控件面板拖出一个IamgeView到蓝图预览图,View的四个角的小方块用于控制View的大小。
添加一个约束,会有一个默认的margin,可以在工具栏设置。
创建约束,请记住以下规则:
对于删除约束我们可以点击View四边的约束柄,或者左下角的图标删除当前View的所有约束。
一个View的边可以对齐到另一个View的边,使用菜单进行对齐:
使用约束柄进行对齐:
一个 文本View 的基线可以与另一个 文本View 的基线对齐。点击 可以调出基线约束柄。
我们可以添加一个垂直或水平guideline约束View,并且guideline对用户是不可见的。Guideline相对于布局边界的单位可以是dp或百分比。点击Guideline边上的圆点可以切换测量模式。
我们可以利用View的四个角的小方块用于调整View的大小,但这样调整的View大小是固定的。打开右上角的Properties
窗口,我们可以看到如下图所示(这个只对约束布局中的View可用):
图 Properties 窗口包含的功能:1大小比例,2删除约束,3高度/宽度模式,4margins,5约束偏移。
你可以点击图中符号3所对应的位置来切换高度或宽度计算的方式。这些符号代表的模式大小如下所示:
注意:ConstraintLayout中的所有View不应该使用
match_parent
,应该使用”match constraints” (0dp).
如果View的尺寸至少设置了一个”match constraints” (0dp)那你可以给View的大小设置一个比例。
我们可以通过工具栏设置默认的margin,这只对后面添加的View生效。我们也可以在 Properties 窗口设置margin。
图 工具栏 Margin 按钮
一个链是一组View互相链接双向约束。例如,下图说明了两个View互相约束,因此创建了一个水平链。
一个链可以使用下面的样式水平或垂直分散一组View,如下图所示:
layout_constraintHorizontal_weight
和layout_constraintVertical_weight
属性设置权重。链的”head” View(水平链为最左边的View,垂直链为最上边的View) 在XML中定义了链的样式。点击 可以切换样式。
注意事项:
除了通过给布局中的每个View添加约束,你也可以移动View到期望的位置,然后点击Infer Constraints
自动连接是单独的特性可以打开或关闭。当打开后,它会自动为添加到布局的View创建两个或多个约束,但只有当View可以适当地约束到父布局。自动连接不会为布局中的其它View创建约束。
自动连接默认是关闭的,你可以通过工具栏点击Turn on Autoconnect
打开自动连接。
我们也可以使用代码创建约束集合用于ConstraintLayout。使用ConstraintSet可以创建和保存约束,并且应用到ConstraintLayout。使用不同方式创建ConstraintsSet:
1.手动,使用ConstraintSet提供的方法
1
|
c = new ConstraintSet(); c.connect(....);
|
2.从布局加载
1
|
c = new ConstraintSet();
|
3.从ConstraintLayout加载
1
|
c = new ConstraintSet();
|
注意两个布局中View及ID应该保持一致,最后使用ConstraintsSet的applyTo方法应用约束到布局。
示例代码:
1
|
import android.content.Context;
|
============== End
原文:https://www.cnblogs.com/lsgxeva/p/13376319.html