ConstraintLayout 是目前 Android Studio 中项目的默认布局,目前已经到了 1.1.2 版本,这里就来介绍下它在新版本中的特性,如果你目前还没有使用过 ConstraintLayout ,可以看下我写的另一篇文章:Android ConstraintLayout 使用详解

一、Circular Positioning

圆形定位用于将两个 View 以角度和距离这两个维度来进行定位,以两个 View 的中心点作为定位点

  1. app:layout_constraintCircle -目标 View 的 ID
  2. app:layout_constraintCircleAngle -对齐的角度
  3. app:layout_constraintCircleRadius  -与目标 View 之间的距离(顺时针方向,0~360度)
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn_target"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Target Button"android:textAllCaps="false"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Source Button"android:textAllCaps="false"app:layout_constraintCircle="@id/btn_target"app:layout_constraintCircleAngle="45"app:layout_constraintCircleRadius="120dp" /></android.support.constraint.ConstraintLayout>

二、Enforcing constraints

在 1.1 版本之前,如果将控件的尺寸设置为 wrap_content,那么对控件设置的 maxWidthminHeight 这些约束是不起作用的,而强制约束就用于使控件在设置 wrap_content 的情况下约束依然生效

  1. app:layout_constrainedHeight="true | false"
  2. app:layout_constrainedWidth="true | false"
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/ic_launcher_background"app:layout_constrainedHeight="false"app:layout_constrainedWidth="false"app:layout_constraintHeight_max="50dp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintWidth_max="50dp" /><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/ic_launcher_background"app:layout_constrainedHeight="true"app:layout_constrainedWidth="true"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintHeight_max="50dp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintWidth_max="50dp" /><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/ic_launcher_background"app:layout_constrainedHeight="true"app:layout_constrainedWidth="false"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintHeight_max="50dp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintWidth_max="50dp" /></android.support.constraint.ConstraintLayout>

三、Dimensions

当控件的尺寸设置为 0dp 时,可以用以下两个属性来指定当前控件的宽度或高度占父控件的百分比,属性值在 0 到 1 之间

  1. layout_constrainWidth_percent
  2. layout_constrainHeight_percent
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn_target"android:layout_width="0dp"android:layout_height="wrap_content"android:text="Target Button"android:textAllCaps="false"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintWidth_percent="0.8" /><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:text="Source Button"android:textAllCaps="false"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/btn_target"app:layout_constraintWidth_percent="0.5" /></android.support.constraint.ConstraintLayout>

四、Barrier

很多时候我们都会遇到控件的大小随着其包含的数据的多少而改变的情况,而此时如果有多个控件之间是相互约束的话,就比较难来设定各个控件间的约束关系了
Barrier(屏障)就是用于这种情况,Barrier 和 GuideLine 一样是一个虚拟的 View,对界面是不可见的,只是用于辅助布局,而 Barrier 和 GuideLine 的区别在于它可以由多个 View 来决定其属性

Barrier 可以使用的属性有:

  1. barrierDirection:用于设置 Barrier 的位置,属性值有:bottom、top、start、end、left、right
  2. constraint_referenced_ids:用于设置 Barrier 所引用的控件的 ID,可同时设置多个
  3. barrierAllowsGoneWidgets:默认为 true,当 Barrier 所引用的控件为 Gone 时,则 Barrier 的创建行为是在已 Gone 的控件已解析的位置上进行创建。如果设置为 false,则不会将 Gone 的控件考虑在内
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn_target"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="这是一段并不长的文本"android:textAllCaps="false"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/btn_source"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="我也不知道说什么好"android:textAllCaps="false"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/btn_target" /><android.support.constraint.Barrierandroid:id="@+id/barrier"android:layout_width="match_parent"android:layout_height="match_parent"app:barrierAllowsGoneWidgets="false"app:barrierDirection="end"app:constraint_referenced_ids="btn_target,btn_source" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="那就随便写写吧"android:textAllCaps="false"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toEndOf="@id/barrier"app:layout_constraintTop_toBottomOf="@id/btn_target" /></android.support.constraint.ConstraintLayout>

此时还看不出来 Barrier 的作用,但当按钮内的文本内容增多时,就可以看出来了

五、Group

Group 用于控制多个控件的可见性,如果要隐藏多个控件则不必再单独设置每个控件的可见性了,其使用到的属性有

  1. constraint_referenced_ids :用于设置所引用的控件的 ID
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn_target"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Target Button"android:textAllCaps="false"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/btn_source"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Source Button"android:textAllCaps="false"app:layout_constraintCircle="@id/btn_target"app:layout_constraintCircleAngle="45"app:layout_constraintCircleRadius="120dp" /><android.support.constraint.Groupandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:visibility="visible"app:constraint_referenced_ids="btn_target, btn_source" /></android.support.constraint.ConstraintLayout>

六、Placeholder

Placeholder (占位符)用于和一个视图关联起来,通过 setContentId() 方法将占位符转换为指定的视图,即视图将在占位符所在位置上显示,如果此时布局中已包含该视图,则视图将从原有位置消失

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn_setContentId"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="setContentId"android:text="setContentId"android:textAllCaps="false" /><ImageViewandroid:id="@+id/iv_target"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/ic_launcher_background"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@id/btn_setContentId" /><android.support.constraint.Placeholderandroid:id="@+id/placeholder"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /></android.support.constraint.ConstraintLayout>
        Placeholder placeholder = findViewById(R.id.placeholder);placeholder.setContentId(R.id.iv_target);

此外也可以直接在布局文件中将占位符和视图 ID 绑定在一起

    <android.support.constraint.Placeholderandroid:id="@+id/placeholder"android:layout_width="wrap_content"android:layout_height="wrap_content"app:content="@id/iv_target"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" />

约束布局(ConstraintLayout)1.1.2 版本的新特性相关推荐

  1. 约束布局ConstraintLayout看这一篇就够了

    目录 1.介绍 2.为什么要用ConstraintLayout 3.如何使用ConstraintLayout 3.1 添加依赖 3.2 相对定位 3.3 角度定位 3.4 边距 3.5 居中和偏移 3 ...

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

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

  3. 约束布局ConstraintLayout

    文章目录 一,背景 二,控件优点 三,项目中引入 四,基本使用 4.1 相对位置 4.2 尺寸约束 4.3 宽高比 Ratio 4.4 百分比宽高 Percent 4.5 偏移量 bias 4.6 圆 ...

  4. 约束布局ConstraintLayout(官翻篇)

    目录 ConstraintLayout Relative positioning 相对定位 Margins 间距 当关联的控件可见性是GONE的时候 Centering positioning and ...

  5. Android开发笔记(一百四十九)约束布局ConstraintLayout

    约束布局ConstraintLayout是Android Studio 2.2推出的新布局,并从Android Studio 2.3开始成为默认布局文件的根布局,由此可见Android官方对其寄予厚望 ...

  6. Android :约束布局ConstraintLayout 之 Chains 链式约束

    ConstraintLayout Chains 链式约束 1. 链 简介 ( 1 ) Chains ( 链 ) 简介 2. 创建 链 及 分析 生成的代码 ( 1 ) 创建水平链 ( 2 ) 链创建后 ...

  7. Android第二讲笔记(约束布局ConstraintLayout)

    目录 为什么要使用约束布局ConstraintLayout? 约束布局基本属性 约束布局简单使用方法 示例 示例一(仿QQ消息) 示例二(仿微信登陆界面) 示例三(仿QQ音乐界面) 补充 写在最后 S ...

  8. php7 最新版本,总结PHP 7.x 各个版本的新特性

    推荐(免费):PHP7 PHP 7.x 各个版本的新特性 前言 上个月同事看见我写$a = $a ?? ''; 问我这个写法是什么,还有这样的写法?我说这是PHP7以上才有的写法,你不知道吗?他说不知 ...

  9. jdk 5 到 jdk 10各个版本的新特性

    jdk5 jdk10各个版本的新特性 JDK1.5新特性: 工程代号为Tiger(老虎) 自从JDK1.3开始,sun维持一个习惯,大约每隔两年发布一个JDK的主版本,以动物命名,期间发布的各个修正版 ...

  10. mysql5.0版本特性_mysql各版本的新特性整理

    mysql各版本的新特性整理 一.各版本的常用命令差异 show innodb status\G mysql-5.1 show engines innodb status\G mysql-5.5 关于 ...

最新文章

  1. java 汉字转拼音_推荐一款前端汉字转拼音组件工具
  2. 二层交换机、三层交换机与路由器的比较
  3. android jni 回调 java_android linux线程通过JNI回调java函数 | 学步园
  4. 《走遍中国》珍藏版(五)
  5. Windows下源码获取
  6. oracle数据库常用的语法与复合函数
  7. Job 存储和持久化 (第四部分)
  8. 关于人工智能的实现(猜测)
  9. linux 下解决arp病毒攻击时上网问题的最简单的治标办法
  10. Java中static的用法,初始化块
  11. 计算机网络期末总结复习(全)
  12. kafka craft 尝鲜
  13. Page migration
  14. ​smooth-signature​.js: 前端canvas实现H5带笔锋手写签名,支持PC端和移动端使用,无框架限制,Vue、React等均可使用
  15. android qq侧滑,Android实现QQ的侧滑置顶、删除
  16. 使用Arduino IDE来编写上传STM32以及STM8代码,STM32Duino教程
  17. 【资源】DNW驱动,Win7 64位可用
  18. origin copy page图片不全
  19. Python求风向xy向量
  20. 笔记本亮度无法调节的可能原因

热门文章

  1. 计算机桌面图标有小纸张,电脑桌面图标上都有个小图标,为什么
  2. android画板需求分析,Android编程实现画板功能的方法总结【附源码下载】
  3. java 多线程callable_java 多线程-实现Callable接口
  4. linux服务器Apache Axis,Apache Axis2 的安装(Linux)
  5. 闪电邮修改服务器设置,网易闪电邮添加outlook邮箱的方法(图文教程)
  6. SpringBoot 配置 文件 mybatis type-aliases-package
  7. linux iptables
  8. CentOS7没有telnet命令的解决方法
  9. java进销存系统源码_青云源码——最新企业进销存管理系统源码分享
  10. 初识 NGINX 服务网格