AndroidUI-约束布局ConstrainLayout

2023-11-02

参考资料[约束布局ConstraintLayout看这一篇就够了](https://www.jianshu.com/p/17ec9bd6ca8a)

约束布局ConstrainLayout

约束布局的出现主要是为了解决试图层级嵌套过多的情况,它可以在api9以上的版本使用。从2.3开始,官方的模板默认使用ConstrainLayout。

1.引入依赖

使用约束布局需要引入以下依赖:

    implementation 'com.android.support.constraint:constraint-layout:1.1.3'

2.相对定位

相对于其他控件的上下左右,以及基准线进行布局。

//本元素的 ?1 位置 与 目标元素 的 ?2 位置相对应
app:layout_constrain[?1]_to[?2]Of="@+id/目标元素Id"

3.角度定位

相对于其他控件的中心,以y轴为0度顺时针计算角度,配合距离进行布局。

//本元素以目标元素为圆心
app:layout_constraintCircle="@+id/目标元素Id"
//围绕圆心从y轴开始的旋转角度
app:layout_constraintCircleAngle="90"
//本元素中心距离目标元素中心的距离
app:layout_constraintCircleRadius="150dp"

4.边距

直接设置边距是不生效的,只有当控件被约束了位置之后,边距才有效。

//边距需大于等于0
app:layout_margin[?]="1dp"

goneMargin可以在目标元素gone隐藏时生效。

app:layout_goneMarginLeft="10dp"

5.居中与偏移

如果给元素的两个相反位置设置了约束,那么这个元素就会放置在两个约束的中间。

//竖直居中
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
//在设置约束之后可以设置margin也是有效的
//还可以使用bias属性进行偏移,值为0~1 0的时候在最顶部,1的时候在底部
app:layout_constraintVertical_bias="0.2"

6.尺寸约束

  • 使用指定的尺寸
  • wrap_content
    使用wrap_content的时候可以设置最大最小的高度或者宽度:
    android:minWidth 最小的宽度
    android:minHeight 最小的高度
    android:maxWidth 最大的宽度
    android:maxHeight 最大的高度
    注意!当ConstraintLayout为1.1版本以下时,使用这些属性需要加上强制约束,如下所示:
    app:constrainedWidth=”true”
    app:constrainedHeight=”true”
  • 0dp (官方不建议使用match_parent,应该使用0dp配合约束达成效果)
  • 宽高比
    当宽或高中至少有一个为0dp时,可以设置宽高比
//宽:高 = 1:1
app:layout_constraintDimensionRatio="1:1"

7.链

两个以上的控件通过相互约束结合在一起,就可以看作一条链,可以改变链的样式。

  • CHAIN_SPREAD 展开元素 (控件之间,控件两端布局是平分的,默认)
  • CHAIN_SPREAD_INSIDE 展开元素 (两端不留空间,控件之间平分)
  • CHAIN_PACKED —— 链的元素将被打包在一起。(之间不留空间)

将宽或高设置为0dp,还可以通过权重控制大小。

app:layout_constraintHorizontal_weight="1"

8.优化级别

有一个名为 layout_optimizationLevel 的新标签,用于配置优化级别。它可以设置为以下内容:

  • barriers:找出屏障所在,并用简单的约束取代它们
  • direct:优化那些直接连接到固定元素的元素,例如屏幕边缘或引导线,并继续优化直接连接到它们的任何元素。
  • standard:这是包含barriers 和 direct 的默认优化级别。
  • dimensions:目前处于实验阶段,并且可能会在某些布局上出现问题——它会通过计算维度来优化布局传递。
  • chains:目前正在实验阶段,并计算出如何布置固定尺寸的元素链。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AndroidUI-约束布局ConstrainLayout 的相关文章

  • gdb调试步骤

    gdb调试 Gdb调试过程 1 程序经过预处理后 即进入编译阶段 进入编译阶段 首先声明编译 2 格式 gdb o test test c g 3 进入编译 gdb test 4 显示需要编译调试的源程序 l list list filen
  • Python 基于openpyxl的表格数据处理 举例为统计身高数据

    基于openpyxl的表格数据处理 注意事项 将data html文件放到py文件同级目录下使用相对路径 或使用绝对路径 data xlsx群里有 没找到可以私聊我 注意事项 如果不确定自己的操作是否影响源数据 请在代码最后保存语句中换成其
  • 大数据基础——Linux常用命令

    一个优秀的操作系统 Linux Linux 内核最初只是由芬兰人林纳斯 托瓦兹 Linus Torvalds 在赫尔辛基大学上学时出于个人爱好而编写的 Linux 是一套免费使用和自由传播的类 Unix 操作系统 是一个基于 POSIX 和
  • 初级JS

    JS中实现一个简单日历
  • 贴片电容介质X5R与X7R之间的区别

    X5R X7R类介质贴片电容是在工业中广泛使用的一种温度稳定型电容器 属于II类介质材料 具有中等介电常数 在使用温度 55 125 85 范围内容值变化率在 15 以内 容值老化率为1 说了这么多都是几乎相同的材料 那么这两种材料的不同到
  • 解决nodejs中json序列化时Date类型默认为UTC格式的问题

    在nodejs中 json序列化时Date类型时 默认转为UTC格式 如下图 zhupengfei DESKTOP HJASOE3 MINGW64 d MyProject exp2 node gt new Date 2018 04 24T1
  • Vue3 :Pinia入门

    Vue3 Pinia入门 Date May 11 2023 Sum Pinia概念 实现counter getters 异步action storeToRefs保持响应式解构 什么是Pinia Pinia 是 Vue 的专属状态管理库 可以
  • 什么是第二人称,第二人称在游戏的表现

    油管up Nick Robinson 做过介绍 第一人是玩家角色自身 第二人是游戏内的其他角色 第三人是独立于游戏的观察者 所以说 第一人称视角来自玩家角色自身 玩家看到视角的和现实的视角一致 第三人称视角来自一个独立于游戏世界的第三方观察
  • Doris之rollup上卷及物化视图

    Rollup上卷 通过建表语句创建出来的表称为 Base 表 Base Table 基表 在 Base 表之上 我们可以创建任意多个 ROLLUP 表 这些 ROLLUP 的数据是基于 Base 表产生的 并且在物理上是独立存储的 Roll
  • Redhat Enterprise Linux 9安装配置图解教程

    2022 年 5 月 18 日 IBM 收购的红帽公司宣布推出红帽企业 Linux 9 RHEL 9 这是世界领先的企业 Linux 平台的最新版本 RHEL 9 为支持混合云创新提供了更灵活 更稳定的基础 并为跨物理 虚拟 私有和公共云和
  • workman 日志_workerman

    下载 手册参考 http doc3 workerman net 一 WorkerMan代码规范 1 类采用首字母大写的驼峰式命名 类文件名称必须与文件内部类名相同 以便自动加载 2 使用命名空间 命名空间名字与目录路径对应 并以开发者的项目
  • Java架构直通车——Redis的PF实现原理:HyperLogLog

    文章目录 引入 什么是基数统计 基数统计的常用方法 HyperLogLog原理 再近一步 分桶平均 更近一步 真实的HyperLogLog 引入 之前的文章Java架构直通车 点赞功能用Mysql还是Redis 一文中 我们介绍了分别从my
  • Java处理Excel

    1 引言 Excel是我们平时工作中比较常用的用于存储二维表数据的 Java中有两种常用的方法操作Excel jxl和poi 其中 在小数据量时jxl快于poi 在大数据量时poi要快于jxl 但差距都不明显 本文使用poi进行处理Exce
  • thinkPHP6.0入门笔记(四)——删除和修改用户信息

    thinkPHP6 0实现删除和修改用户信息 1 删除用户信息 2 优化bootstrap资源引入方式 3 浏览器的cookie与session机制 4 token令牌原理 5 利用token防止表单重复提交 6 同步表单数据库修改 参考文
  • 盘点国内10家互联网AI大模型

    ChatGPT在国内掀起热潮后 中国的生成式AI技术也迎来了蓬勃发展 中国国产AI模型的前景非常广阔 尤其是在中国国家战略的推动下 人工智能领域正在迅速发展 中国的公司和研究机构都在积极进行研发 并取得了一些重大进展 下面我们来看一下已经开
  • spark-2.2.0安装和部署——Spark集群学习日记

    前言 在安装后hadoop之后 接下来需要安装的就是Spark scala 2 11 7下载与安装 具体步骤参见上一篇博文 Spark下载 为了方便 我直接是进入到了 usr local文件夹下面进行下载spark 2 2 0 wget h
  • 【ffmpeg + VS2010】编译包含libavutil\common.h后出现找不到inttypes.h的问题

    包含libavutil common h 由于里面 include
  • 正则表达式(Regular Expressions)

    1 至少8个字符 8 2 URL http w w w URL 2 a zA z w w w w S 3 E Mail w w w w w w E Mail 2 w w w E Mail 3 w w w w 4 非负整数 正整数 0 d 5
  • 【设计】LDO

    参考 设计 低压差稳压器 LDO 的设计分析 对于误差放大器 当没有输出电容 为寄生电容的时候 输出的误差放大器为高频极点 而LDO的输出极点为环路的主极点 LDO输出极点随负载电流变化而变化 当负载电流变小 RL增大 Ppow的输出极点也
  • RPC调用的流程

    RPC调用的流程 要让网络通信细节对使用者透明 我们自然需要对通信细节进行封装 我们先看下一个RPC调用的流程

随机推荐

  • 【svelte】A11y: <div> with click handler must have an ARIA role;A11y: non-interactive elements

    问题描述 svelte项目跑起来的时候 控制台打印以下警告 vite plugin svelte src routes page svelte 50 8 A11y visible non interactive elements with
  • Servlet文件上传

    1 创建upload html文件为了提交上传表单
  • matlab 和 excel 数据的导入导出

    1 将excel中的数据导入到matlab中 将excel中 的数据导入到matlab中采用matlab库函数xlsread 1 C xlsread filename xls 2 C xlsread filename xls range 表
  • import java util_java里面import java.util.*;是什么用处?

    展开全部 import java util 导入32313133353236313431303231363533e78988e69d8331333366303064 java util包中的类接口 Java中import的作用是导入要用到的
  • 实验——田忌赛马c++

    故事概述 孙膑先以下等马对齐威王的上等马 第一局田忌输了 接着进行第二场比赛 孙膑拿上等马对齐威王的中等马 获胜了一局 第三局比赛 孙膑拿中等马对齐威王的下等马 又战胜了一局 比赛的结果是三局两胜 田忌赢了齐威王 还是同样的马匹 由于调换一
  • grep高级用法shell

    一 grep命令的基本概念和用途 grep命令是linux中一种强大的文本搜索工具 它能使用正则表达式搜索文本 并把匹配的行打印出来 在一个或多个文件中搜素字符串模式 如果字符串模式包括空格 也必须被引用 模式后的所有字符串被看作文件名 搜
  • 在头文件中加入#program once

    在头文件中加入 program once 可以解决头文件被重复引用的问题 例 error C2143 语法错误 缺少 在 的前面 error C4430 缺少类型说明符 假定为 int 注意 C 不支持默认 int error C4430
  • 中国汽车工业的发展道路

    中国汽车工业的发展道路 回顾与展望 合作与自主问题 1 中国汽车工业发展的背景与回顾 1 1 认识汽车工业 汽车是惟一的一种 零件以万计 产量以百万计 保有量以亿计 的 第一商品 它的巨大市场潜力 不断产生着科技进步的不竭动力 使它成为各种
  • Kotlin中take、drop方法使用

    1 take方法 private fun take val mList mutableListOf 1 2 3 4 5 6 7 8 9 0 take函数是根据传入的参数挑出该集合 前n个元素 的子集合 val mNewList1 mList
  • 全文搜索引擎,索引库

    全文搜索引擎的工作原理理论上很简单 关键技术就是 分词 索引库 使用分词技术把 文档数据 按分词拆分 也就是一个文档拆分为多个分词 一条普通数据拆分为多个词的索引数据 这个结构就形成了 索引库 索引库存储的数据就叫索引 索引数据 所以当普通
  • 全国计算机等级考试题库二级C操作题100套(第68套)

    第68套 给定程序中 函数fun的功能是 求ss所指字符串数组中长度最长的字符串所 在的行下标 作为函数值返回 并把其串长放在形参n所指变量中 ss所指字符串数组中共有M个字符串 且串长
  • Esxi下通过虚拟文件安装lede系统(一分钟搞定)

    Esxi下通过虚拟文件安装lede系统 一分钟搞定 安装环境esxi6 7 已经提供的LEDE相关文件 安装说明 安装下面提供的图片依次设置即可 1 登录esxi 选择存储 选择数据存储浏览器 2 设置目录名称 3 安装下图将文件依次上载
  • 用 Github Codespaces 免费搭建本地开发测试环境

    如何丝滑地白嫖一个本地开发环境 怎么新建一个代码空间 1 通过Github网页新建 2 通过VSCode插件新建 为代码创建相应的开发测试环境 如何丝滑地白嫖一个本地开发环境 使用Codespaces为开发者解决这样的痛点 为项目设置和维护
  • 搞懂Mybatis逆向⼯程这一篇就够了

    Mybatis逆向 程配置与 成 使用基础版本 前置准备 项目结构 导入依赖 配置generatorConfig xml 数据库表 使用逆向工程 点击插件使用 双击之后效果 UserMapper xml的内容 UserMapper接口的内容
  • 西门子PLC各类通信协议差异对比

    西门子PLC有4大类 几十个型号类型 PLC不同所支持的通讯协议也不相同 S7 200系列支持的协议有 PPI MPI PROFIBUS 以太网 S7协议 AS INTERFACE USS MODBUS 自由口 S7 300 400系列支持
  • 人工智能在线特征系统中的数据存取技术

    主流互联网产品中 不论是经典的计算广告 搜索 推荐 还是垂直领域的路径规划 司机派单 物料智能设计 建立在人工智能技术之上的策略系统已经深入到了产品功能的方方面面 相应的 每一个策略系统都离不开大量的在线特征 来支撑模型算法或人工规则对请求
  • linux 文件句柄数查看命令

    当你的服务器在大并发达到极限时 就会报出 too many open files 查看线程占句柄数 ulimit a 输出如下 core file size blocks c 0 data seg size kbytes d unlimit
  • 微服务知识点整理

    1 Spring Cloud Netflix和Spring Cloud Alibaba包括哪些组件 Spring Cloud Netflix 主要由 Eureka Ribbon Feign Hystrix Zuul Gateway Conf
  • map的内存释放

    map在erase和clear后是否会马上释放内存 参考链接 关于c 中map的内存占用问题 原文 原文提到map在erase和clear后不会立马释放内存 而是采用类似内存池的机制 对申请的内存进行 预留 在一段时间内不使用才会予以 释放
  • AndroidUI-约束布局ConstrainLayout

    参考资料 约束布局ConstraintLayout看这一篇就够了 https www jianshu com p 17ec9bd6ca8a 约束布局ConstrainLayout 约束布局的出现主要是为了解决试图层级嵌套过多的情况 它可以在