约束布局ConstraintLayout

  这种布局方式出现已经有一段时间了,刚出现的时候一直以为这种布局只是针对拖拽使用的布局,最近在新项目里看到了这种布局,又重新学习了这种布局,才发现以前真的是图样图森破啊,这种新的布局方式真的太好用了!

1.引入

使用之前需要添加这种布局的依赖

  1. implementation 'com.android.support.constraint:constraint-layout:1.1.0'

2.使用

2.1基本布局方式:

  • layout_constraintLeft_toLeftOf
  • layout_constraintLeft_toRightOf
  • layout_constraintRight_toLeftOf
  • layout_constraintRight_toRightOf
  • layout_constraintTop_toTopOf
  • layout_constraintTop_toBottomOf
  • layout_constraintBottom_toTopOf
  • layout_constraintBottom_toBottomOf
  • layout_constraintBaseline_toBaselineOf

举个栗子:

  1. layout_constraintLeft_toLeftOf="parent" //大概意思就是这个控件的左边跟父控件的左边对齐
  2.  
  3. layout_constraintRight_toLeftOf="xxx" //该控件的右边跟xxx的左边对齐

就像这里栗子说的一样,用这些约束方式就可以约束一个控件的具体位置

这里大家发现这种布局方式跟RelativeLayout是很相似的

2.2 圆形定位

  1. layout_constraintCircle :引用另一个小部件ID
  2. layout_constraintCircleRadius :到其他小部件中心的距离
  3. layout_constraintCircleAngle :小部件应该在哪个角度(度数,从0360

2.3 width设置为0的用法:

当设置width为0 的时候可以使该控件填充剩余空间,

那么我们想使用LL的权重特性该怎么办呢?ConstraintLayout同样也是支持的

  1. layout_constraintHorizontal_weight="1"

约束布局里也提供了权重的方法约束宽度,在使用上一定要注意使用权重的控件一定要约束完整,注意:相互约束的控件有Visible差异并不影响约束的完整,使用权重的控件width一定要设置为0

  1. <Button
  2. android:id="@+id/btn_01"
  3. android:layout_width="0dp"
  4. android:layout_height="wrap_content"
  5. android:text="01"
  6. app:layout_constraintHorizontal_weight="1"
  7. app:layout_constraintLeft_toLeftOf="parent"
  8. app:layout_constraintRight_toLeftOf="@id/btn_02"
  9. app:layout_constraintTop_toBottomOf="@id/textView" />
  10.  
  11. <Button
  12. android:id="@+id/btn_02"
  13. android:layout_width="0dp"
  14. android:layout_height="wrap_content"
  15. android:text="02"
  16. android:visibility="gone"
  17. app:layout_constraintHorizontal_weight="1"
  18. app:layout_constraintLeft_toRightOf="@id/btn_01"
  19. app:layout_constraintRight_toLeftOf="@id/btn_03"
  20. app:layout_constraintTop_toBottomOf="@id/textView" />
  21.  
  22. <Button
  23. android:id="@+id/btn_03"
  24. android:layout_width="0dp"
  25. android:layout_height="wrap_content"
  26. android:text="03"
  27. app:layout_constraintHorizontal_weight="1"
  28. app:layout_constraintLeft_toRightOf="@id/btn_02"
  29. app:layout_constraintRight_toRightOf="parent"
  30. app:layout_constraintTop_toBottomOf="@id/textView" />

这里发现这种布局方式跟LinearLayout是有相似的地方

这里就是这种布局方式的优势所在了

2.4 DimensionRatio比例属性

  1. app:layout_constraintDimensionRatio="W,16:9"
  2. app:layout_constraintDimensionRatio="H,16:9"

这个功能就很牛逼了,过去我们想要指定控件的宽高比例只能在代码中指定宽高,在约束布局中直接使用“尺寸比例”的参数可以直接设置比例

2.5 bias偏移属性

  1. app:layout_constraintHorizontal_bias="0.9"
  2. app:layout_constraintVertical_bias="0.9"
  1. <TextView
  2. android:id="@+id/textView2"
  3. android:layout_width="100dp"
  4. android:layout_height="100dp"
  5. android:background="@color/theme"
  6. app:layout_constraintBottom_toBottomOf="parent"
  7. app:layout_constraintHorizontal_bias="0.9"
  8. app:layout_constraintLeft_toLeftOf="parent"
  9. app:layout_constraintRight_toRightOf="parent"
  10. app:layout_constraintTop_toTopOf="parent"
  11. app:layout_constraintVertical_bias="0.9" />

这个属性在合理约束的时候可以使控件实现偏移,中间为0.5,取值范围为[0,1]

2.6 比例布局

  1. app:layout_constraintHeight_percent="0.2"
  2. app:layout_constraintWidth_percent="0.8"

在宽高设置为0的时候可以使用这两个属性直接设置控件的百分比

2.7 总结:

//基本定位
layout_constraintLeft_toLeftOf
layout_constraintLeft_toRightOf
layout_constraintRight_toLeftOf
layout_constraintRight_toRightOf
layout_constraintTop_toTopOf
layout_constraintTop_toBottomOf
layout_constraintBottom_toTopOf
layout_constraintBottom_toBottomOf

//圆形定位
layout_constraintCircle :引用另一个小部件ID
layout_constraintCircleRadius :到其他小部件中心的距离
layout_constraintCircleAngle :小部件应该在哪个角度(度数,从0到360)

layout_constraintBaseline_toBaselineOf

# 与left,right类似
layout_constraintStart_toEndOf
layout_constraintStart_toStartOf
layout_constraintEnd_toStartOf
layout_constraintEnd_toEndOf

# margin不需要解释
android:layout_marginStart
android:layout_marginEnd
android:layout_marginLeft
android:layout_marginTop
android:layout_marginRight
android:layout_marginBottom

#当2个view有相对位置的依赖关系,当其中一个view设置1位gone时,这个比较有意思,比方说假设A设置为gone,后,B需要距离父布局的左侧200dp,
怎么办?这时候,goneMargin属性就派上用场啦,只要设置B的layout_goneMarginLeft=200dp即可。这样,A不为gone的时候,
B距离A 为android:layout_marginLeft ,A为gone时,B距离父布局左侧layout_goneMarginLeft200dp。
layout_goneMarginStart
layout_goneMarginEnd
layout_goneMarginLeft
layout_goneMarginTop
layout_goneMarginRight
layout_goneMarginBottom

layout_constraintHorizontal_bias
layout_constraintVertical_bias

layout_constraintHorizontal_chainStyle
layout_constraintVertical_chainStyle

layout_constraintVertical_weight

app:layout_constraintHeight_percent
app:layout_constraintWidth_percent

android:minWidth 设置布局的最小宽度
android:minHeight 设置布局的最小高度
android:maxWidth 设置布局的最大宽度
android:maxHeight 设置布局的最大高度

  1.  

可以看出ConstraintLayout 是很全面的一种布局,集合了相对布局,线性布局的特点,同时能使用偏移和百分比的特性,所以省去了嵌套的麻烦,是布局达到了扁平化,省下了很多资源

by Jungle轶

ConstraintLayout 约束布局的更多相关文章

  1. 使用ConstraintLayout(约束布局)构建响应式UI

    使用ConstraintLayout(约束布局)构建响应式UI 转 https://www.300168.com/yidong/show-2740.html     核心提示:ConstraintLa ...

  2. Android Material Design控件使用(一)——ConstraintLayout 约束布局

    参考文章: 约束布局ConstraintLayout看这一篇就够了 ConstraintLayout - 属性篇 介绍 Android ConstraintLayout是谷歌推出替代PrecentLa ...

  3. Android 开发 CoordinatorLayout 协调者布局 与 ConstraintLayout约束布局 两者的关系

    在摸索新技术是发现CoordinatorLayout 与 ConstraintLayout 会有冲突关系,所以就研究了一下他们之间的不兼容,被影响的方面.其实某种程度上来说是CoordinatorLa ...

  4. Android ConstraintLayout 约束布局属性

    常用方法总结 layout_constraintTop_toTopOf // 将所需视图的顶部与另一个视图的顶部对齐. layout_constraintTop_toBottomOf // 将所需视图 ...

  5. 约束布局ConstraintLayout详解

    约束布局ConstraintLayout详解 转 https://www.jianshu.com/p/17ec9bd6ca8a 目录 1.介绍 2.为什么要用ConstraintLayout 3.如何 ...

  6. 约束布局constraint-layout导入失败的解决方案 - 转

    今天有同事用到了约束布局,但是导入我的工程出现错误 **提示错误: Could not find com.Android.support.constraint:constraint-layout:1. ...

  7. 约束布局ConstraintLayout

    Android新特性介绍,ConstraintLayout完全解析 约束布局ConstraintLayout用法全解析 约束布局ConstraintLayout看这一篇就够了

  8. 约束布局ConstraintLayout加快布局速度

    Android Studio2.2更新布局设计器,同时,引人了约束布局ConstraintLayout. 简单来说,可以把它看做是相对布局的升级版本,但是区别与相对布局更加强调约束.何为约束,即控件之 ...

  9. Android开发之ConstraintLayout相对布局

    介绍 一个 ConstraintLayout 是一个 ViewGroup 允许您以灵活的方式定位和调整小部件的方法. 注意: ConstraintLayout 作为支持库提供,您可以在API级别9(G ...

随机推荐

  1. C++实例 MySTLString

    #include <iostream> #include <cstring> #include <string> using namespace std; clas ...

  2. wget常用下载命令

    wget wget是一个从网络上自动下载文件的自由工具,支持通过HTTP.HTTPS.FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理.wget名称的由来是“World Wide Web ...

  3. Centos7 使用 Supervisor 守护进程 Celery

    一.Supervisor 安装(centos7 还有另一个进程守护命令 Systemd ) Centos 7 安装 Supervisord 二.Supervisor 守护进程 Centos7 使用 S ...

  4. Asp.net自定义控件开发任我行(4)-ViewState保存控件状态

    摘要 上一篇我们实现了下拉框的效果,此章的目的主要是保存控件属性状态 内容 我们先来看一个例子,后台代码不变,我们只改UI页面的代码,先在页面上拖放两个控件,一个是我们现在要开发的这个控件,另一个是按 ...

  5. linux简单授权

    linux授权:r: readw: writex:executech:change b=byte1byte=8 bitsu=user ownerg=groupo=othera=all_ _ _ _ _ ...

  6. Leetcode 558.四叉树交集

    四叉树交集 四叉树是一种树数据,其中每个结点恰好有四个子结点:topLeft.topRight.bottomLeft 和 bottomRight.四叉树通常被用来划分一个二维空间,递归地将其细分为四个 ...

  7. [oldboy-django][2深入django]班级管理(Form)--添加

    1.需求: 添加班级,当有某个输入框数据格式不对时,会保留所有输入框的上次输入数据, 同时给出错误信息 2.视图 def add_class(request): # 提交数据都要用form来实现,因为 ...

  8. 用最优方法从LinkedList列表中删除重复元素

    用运行速度最优的方法从LinkedList列表里删除重复的元素,例如A->B->BB->B->C,返回A->B->BB->C. 考试的时候没完全想明白,考完又 ...

  9. Vue2.0 - 构造器的延伸 Vue.extend

    Vue.extend 返回的是一个“扩展实例构造器”,也就是预设了部分选项的Vue实例构造器.经常服务于Vue.component用来生成组件,可以简单理解为当在模板中遇到该组件名称作为标签的自定义元 ...

  10. POJ 3321:Apple Tree(dfs序+树状数组)

    题目大意:对树进行m次操作,有两类操作,一种是改变一个点的权值(将0变为1,1变为0),另一种为查询以x为根节点的子树点权值之和,开始时所有点权值为1. 分析: 对树进行dfs,将树变为序列,记录每个 ...