文章目录

  • I . 屏障 Barrier 约束 简介
  • II . 屏障线 Barrier 与 引导线 Guideline 对比
  • III . 屏障 Barrier 适用场景
  • IV . 屏障 Barrier 位置说明
  • V . 屏障 Barrier 相关属性
  • VI . 屏障 Barrier 可视化操作
  • VII . 屏障 Barrier 代码示例
  • VIII . 屏障 Barrier 总结

I . 屏障 Barrier 约束 简介


屏障 Barrier 简介 :

① 屏障 Barrier 概念 : 屏障 Barrier 中 , 包含了多个组件 , 基于这些组件在某个方向 ( 如 : 上,下,左,右 ) 上创建的一条虚拟的线 , 屏障线的位置是其指定方向的最外侧的位置 ; 如 333 个组件的右屏障位置是 , 最右侧组件的右边缘位置 ;

② 本质 : Barrier ( 屏障 ) 是一条隐藏的线 , 注意是 111 条线 , 不是 444 条 ;

③ 可见性 : Barrier ( 屏障 ) 是不可见的 , 仅用于约束视图组件 ;

④ 位置 : Barrier ( 屏障 ) 没有位置定义 , 其位置由组成屏障的多个组件的位置确定 , 如果某个组件的位置改变 , 其 Barrier 的位置也有可能随之改变 ; ( 不是一定改变 )

⑤ 作用 : 其作用与 Guideline 引导线一样 , 只是 屏障线 Barrier 生成方式与 Guideline 不一样 , Guideline 是指定好位置 , Barrier 是通过多个组件生成的位置 ;

II . 屏障线 Barrier 与 引导线 Guideline 对比


1 . 屏障线 Barrier 与 引导线 Guideline 区别 : 主要是生成方式不一样 , 用于约束其它组件的方式基本一致 ;

① 屏障线 : 如多个组件某个方向 ( 右侧 ) 的线 是屏障线 , 如果其中最右边的组件 , 向右移动 , 屏障线会随着该组件向右移动 ;

② 引导线 : 引导线的位置是定死的 , 是相对于父容器边缘的位置 ;

2 . 屏障线 Barrier 与 引导线 Guideline 联系 : 二者用于约束其它组件的方式基本一样 ;

① 垂直方向的 屏障线 与 引导线 : 用于组件的水平方向的约束 ;

② 水平方向的 屏障线 与 引导线 : 用于组件的垂直方向的约束 ;

III . 屏障 Barrier 适用场景


1 . 屏障 Barrier 适用场景 : 被约束组件 , 在某个方向上 , 被多个组件约束的情况 ;

① 单个组件约束 : 某个组件被单个组件约束 , 没有必要使用 屏障 , 直接使用该单个组件约束另外一个组件就可以 ;

② 多个组件约束 : 某个组件被多个组件约束 , 此时非常适合使用屏障 ;

2 . 示例 : 组件 CCC , 在水平方向上 , CCC 组件的左侧必须在 A,BA , BA,B 两个组件的右侧 ;

① 屏障线 : 中间的白色虚线是屏障线 ;

② 屏障组件 : 该屏障 Barrier 包含 A,BA,BA,B 两个视图 ;

③ 屏障方向 : 该屏障的方向是右侧 , 其屏障线的位置是 A,BA,BA,B 两个组件中 , 最右侧的组件的右边缘位置 ;

3 . 屏障 Barrier 线条数 : 每个 Barrier 组件 , 代表一个方向的屏障 , 如果要使用屏障将多个组件包裹起来 , 需要创建 444 个 Barrier 组件 , 分别设置 444 个不同的方向 ;

4 . 注意 : 一个屏障 Barrier 只能在一个方向上起作用 , 如果想要在 444 个方向同时建立屏障 , 需要创建 444 个 Barrier , 分别设置 左 ( LEFT ) , 上 ( TOP ) , 右 ( RIGHT ) , 下 ( BOTTOM ) , 四个方向的属性 ;

IV . 屏障 Barrier 位置说明


1 . 屏障的位置 : 是根据其 包含的组件 在某个方向 最远的边缘 确定 ;

示例 : 如下图 屏障 包含组件 A,BA,BA,B , 屏障的方向是右侧 , 那么屏障位置就是 A,BA,BA,B 两个组件最右边的边缘位置 ; 如下图所示 , 组件 AAA 的右侧边缘就是屏障线位置 ;

2 . 屏障线 移动 : 如果 屏障 包含的组件 A,BA, BA,B 的右侧位置 , 发生了改变 , 那么 右侧方向的 屏障线 也会随之进行变化 ;

示例 : 如下图所示 , 下图中的 组件 A,BA,BA,B 的右侧边缘改变 , BBB 组件的右侧突出 , 屏障位置是两个组件的最右侧边缘 , 那么此时屏障线就变为 BBB 组件最右侧 ;

V . 屏障 Barrier 相关属性


1 . Barrier ( 屏障 ) 组件 : 设置该 屏障 是哪几个组件的屏障 ; 属性值是组件的 id , 如果有多个 id , 使用逗号隔开 ;

app:constraint_referenced_ids="button2,button1"

2 . Barrier ( 屏障 ) 方向 : 设置该 屏障线 , 是这些组件哪个方向的屏障 , 可以选择四个方向 , 分别是 上 , 下 , 左 , 右 , 四个方向 ;

可选属性值 : left ( start ) , right ( end ) , top , bottom ;

app:barrierDirection="top"

VI . 屏障 Barrier 可视化操作


1 . 添加屏障线 : 如下图所示 , 选择 “Add Vertical Barrier” 选项 , 可以添加垂直方向的屏障 ; 选择 “Add Horizontal Barier” 选项 , 可以添加水平方向的屏障 ;

2 . 为屏障配置包含的组件 : 在 Component Tree 面板中 , 鼠标左键按住左键 , 拖动到 Barrier 中 , 即可为 Barrier 屏障 添加包含的组件 ;

3 . 设置屏障方向 : 选中要编辑的 屏障 Barrier 组件 , 在 Attributes 面板中的 Common Attributes 选项卡中的 barrierDirection 中选择 666 个方向 ;

VII . 屏障 Barrier 代码示例


1 . 代码示例 :

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /><!-- 屏障中较大的组件 --><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World! Hello World!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toBottomOf="@id/button1"app:layout_constraintVertical_bias="0.2" /><!-- 左侧屏障 --><androidx.constraintlayout.widget.Barrierandroid:id="@+id/barrier2"android:layout_width="wrap_content"android:layout_height="wrap_content"app:barrierDirection="left"app:constraint_referenced_ids="button2,button1" /><!-- 顶部屏障 --><androidx.constraintlayout.widget.Barrierandroid:id="@+id/barrier3"android:layout_width="wrap_content"android:layout_height="wrap_content"app:barrierDirection="top"app:constraint_referenced_ids="button1,button2" /></androidx.constraintlayout.widget.ConstraintLayout>

2 . 效果展示 :

VIII . 屏障 Barrier 总结


屏障 Barrier 总结 :

① 设置组件包含 : app:constraint_referenced_ids=“button2,button1” ; 组件 ID 之间使用逗号隔开 ;

② 设置方向 : app:barrierDirection=“top” ; 可选属性值 left ( start ) , right ( end ) , top , bottom ;

【约束布局】ConstraintLayout 屏障 Barrier 约束 ( 简介 | 屏障适用场景 | 位置说明 | 相关属性 | 可视化操作 | 代码示例 | 总结 )相关推荐

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

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

  2. 约束布局ConstraintLayout

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

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

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

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

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

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

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

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

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

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

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

  8. 约束布局 ConstraintLayout 的使用

    目录 前言 1.将ConstraintLayout添加到项目中 2.基本规则 3.示例讲解 3.1居中对齐 3.2 排列 3.3引导线Guideline 3.4计算器示例 3.5宽高比示例 3.6Ch ...

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

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

最新文章

  1. 我去字节跳动面试,“偷”回来的面试题,题真难...
  2. React Redux 的一些基本知识点
  3. SpringBoot+Mybatis 实现动态数据源切换方案
  4. 神经网络预测mnist时候如果不归一化,则准确率仅仅10%下文作者svm也遇到了。
  5. 蓝牙激光雕刻机android,迷你型激光雕刻机!私人定制随你玩
  6. BugkuCTF-Crypto题rsa
  7. Recyclerview单选和多选
  8. mysql数据库主从不同步_MySQL数据库之mysql主从数据库不同步的2种解决方法
  9. oracle 12c dbca 无法发现 asm diskgroup
  10. vba单元格批量赋值_「经验」快速学习VBA
  11. 1024程序员节,别人家的公司真香!羡慕ing~
  12. BZOJ5219[Lydsy2017省队十连测] 最长路径
  13. Devcpp(Dev-C++)代码编辑的快捷键
  14. 通过财务报表读懂美股
  15. 计算机管理-磁盘管理中进行扩展卷操作,管理磁盘diskpart命令
  16. 小程序图片电脑开发显示,手机上不显示的问题
  17. 码云新建仓库-代码上传
  18. 密码学—安全归约问题(Reduction)
  19. Cannot run program jad 的错误
  20. cisco路由器各接口模块代表的含义是什么

热门文章

  1. 皮尔·卡丹的管理思想精髓:从小做到大
  2. 题解 DTOJ #1438. 矮人排队(lineup)
  3. Flask-Migrate拓展数据库表结构
  4. fiddler抓取https请求
  5. 历届试题 大臣的旅费 树形DP
  6. Maven pom.xml 全配置(一)常用配置
  7. Mysql8.0 3306端口无法远程连接
  8. echarts 表格与 div 之间 空白的设置
  9. display: none;、visibility: hidden、opacity=0区别总结
  10. 摄像头光圈大小对景深的影响