ConstraintLayout —— 约束布局 知识点整理

ConstraintLayout 使用详解 在安卓开发过程中除了一些列的逻辑代码程序以外,UI界面也是很重要的组成部分,对于用户来说界面更是一个应用的所有,所有的操作和交互都是在UI发生,对于开发者来说UI的加载和绘制对应用的计算和内存的影响更是不容忽视,下面看一组界面: 这个布局很简单一个ImageView,两个Button、两个TextView,首先使用传统布局代码结构如下: 从代码结构看出是采用一个RelativeLayo... 阅读详情

参考文章:
1、Android官方文档
2、约束布局(ConstraintLayout)1.1.2 版本的新特性
3、android ConstraintLayout使用详解
4、Android ConstraintLayout+ConstraintSet实现动画效果


ConstraintLayout 的版本是 1.1.x


layout_constraintXXX_toYYYOf 系列

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
layout_constraintStart_toEndOf
layout_constraintStart_toStartOf
layout_constraintEnd_toStartOf
layout_constraintEnd_toEndOf

如对控件 A 使用 layout_constraintLeft_toRightOf = “@id/B“ 则表示 A 对左边边界对齐 B 对右边边界。

其中,有类似于如下的情形,那就是app:layout_constraintStart_toStartOf和
app:layout_constraintLeft_toLeftOf用起来感觉没啥区别,但是存在即合理,为啥要有两种形式的存在呢?
答案是为了 Android中的RTL Layout 兼容,具体可以看这儿。

Bias

layout_constraintHorizontal_bias
layout_constraintVertical_bias

Guideline

layout_constraintGuide_begin
layout_constraintGuide_end
layout_constraintGuide_percent

以及实现控件的宽高比
app:layout_constraintDimensionRatio
当宽高至少有一项被设置为 0dp 时,可以使用属性 layout_constraintDimentionRatio来给定一个”宽对高”的比率。比率值是一个float值,可以写成 0.5 或 1:2 这样的形式。

类似于 LinearLayout 的 weight 的实现

app:layout_constraintHorizontal_weight
app:layout_constraintVertical_weight

约束链

app:layout_constraintHorizontal_chainStyle
app:layout_constraintVertical_chainStyle

可以为 Chain 中的每个子 View 单独设置 Margin。对于 spread chains, 可用的布局空白空间是扣除 margin 后的空间。

都可以参阅【鸿神的博客:https://blog.youkuaiyun.com/lmj623565791/article/details/78011599】


Margins
原本的 android:layout_marginXXX 系列。不多说。

需要注意的是 View 的四个 margin 值也与 View 的最终位置有关,如果设置了某个方向的 margin 值,那么只有设置相对应方向的约束条件,这个方向的 margin 值才生效。比如设置了android:layout_marginStart="20dp",那么当且仅当设置了 start 的约束条件app:layout_constraintStart_toStartOf或者app:layout_constraintStart_toEndOf这个 margin 值才生效。还要注意的是ConstraintLayout不支持负数的 margin,如果是负数的话效果和 0 一样的,当然负数的 padding 是没问题的。
【引自:https://juejin.im/post/5b26844a6fb9a00e9e59c8a2】

以及 layout_goneMarginXXX 系列,作用是控制当前 View 所参考的 View 状态为 GONE 的时候的 margin 值,如果不为 GONE 则不起作用。

以 app:layout_goneMarginLeft 为例,假设控件 B 相对在 A 的右边,如图:
这里写图片描述

<TextView
    android:id="@+id/tvA"
    android:visibility="visible"
    ... />
<TextView
    android:id="@+id/tvB"
    app:layout_goneMarginLeft="50dp"
    app:layout_constraintLeft_toRightOf="@id/tv1"
    ... />

并且为 B 设置了 app:layout_goneMarginLeft="50dp",此时如果 A 为 GONE,那么B 将距离屏幕的左边 50dp。如图:
这里写图片描述


app:layout_constrainedWidth\Height 与控件大小
android:maxXXX\minXXX 与 app:layout_constrainedWidth_max等 都是用来限制 View 的最大\最小的宽高的。

app:layout_constrainedWidth
app:layout_constrainedHeight

app:layout_constraintWidth_max
app:layout_constraintWidth_min
app:layout_constraintHeight_max
app:layout_constraintHeight_min

在 1.1 版本之前,如果将控件的尺寸设置为 wrap_content,那么对控件设置的 app:layout_constrainedWidth\Height这些约束是不起作用的,因此就在 1.1 中增加了
app:layout_constrainedWidth 、app:layout_constrainedHeight 这两个属性,当置为 true 时且控件尺寸为 wrap_content 时,通过 app:layout_constrainedWidth_max 等设置等限制大小的值就会生效。

另外,当 layout_width 或者 layout_height 为 wrap_content 时(注意:非 0dp),同样可以使用对应的 android:minXXX 与 android:maxXXX 来限制控件的尺寸。

而如果有同时设置 android:maxHeight 与 app:layout_constrainedWidth_max,则不管有没有设置 app:layout_constrainedWidth,都会强制生效 android:maxHeight ,而忽略app:layout_constrainedWidth_max的影响。

【参考博客:https://juejin.im/post/5b26844a6fb9a00e9e59c8a2】


圆形定位 —— Circular positioning (Added in 1.1)

layout_constraintCircle : 被引用控件的 id
layout_constraintCircleRadius : 目标控件中心距离被引用控件中心的距离
layout_constraintCircleAngle : 相对于被引用控件中心的角度(单位:度,范围:0~360)

这里写图片描述


宽高类

app:layout_constraintWidth_default
app:layout_constraintHeight_default

app:layout_constraintWidth_default只有在View的宽度定义为0dp(又叫match_constraint)的时候才生效,其余情况下设置这个属性是不起任何作用的,有三个值:

wrap:等价于 android:layout_width=”wrap_content”
spread:等价于 android:layout_width=”match_parent”
percent:设置 View 的宽度为 parent 的比例值,比例值默认是100%,即宽度是match_parent。这个比例值通过属性app:layout_constraintWidth_percent设置。

如果设置了 app:layout_constrainWidth_percent
则 app:layout_constraintWidth_default 失效。

根据父布局的大小,实现子控件的尺寸百分比占比

app:layout_constrainWidth_percent
app:layout_constrainHeight_percent

比如需要使用 app:layout_constrainHeight_percent ,
则需要设置 android:layout_height 为 0dp(其余不生效),且要设置

app:layout_constraintTop_toXXXOf
app:layout_constraintBottom_toXXXOf

来约束控件的 Top 和 Bottom。

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

【参阅博文:https://juejin.im/post/5b26844a6fb9a00e9e59c8a2】


Barrier
是一个辅助类,不会绘制到屏幕上,也不会展现给用户。它通过属性constraint_referenced_ids将一些View包裹在一起形成一个屏障,然后通过属性barrierDirection向左上右下四个方向给某个 View 提供约束条件,或者叫做屏障方向。

使用这些约束条件(屏障方向)的 View A**可以防止屏障内的 Views 覆盖自己,当屏障内的某个 View C** 要覆盖自己的时候,包含 C 的屏障会自动伸缩,依赖屏障约束的 A 因此也会跟着移动,避免自己被覆盖。

Group
也是一个辅助类,不会绘制到屏幕上,也不会展现给用户。通过属性app:constraint_referenced_ids 将一些 View 组成组进行集体操作,最常见的操作是setVisibility。

<android.support.constraint.Group
        android:id="@+id/group1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:constraint_referenced_ids="button3, textView2"/>

Group 设置的宽高是不起作用的。

【参阅博文:https://www.jianshu.com/p/f86f800964d2】


ConstraintSet 与 TransitionManager 实现动画
【参阅博文:https://blog.youkuaiyun.com/weixin_37730482/article/details/71080567】


额外的非必要属性

下面几个属性是 UI 编辑器所使用的,用了辅助拖拽布局的,在实际使用过程中,可以不用关心这些属性。
● layout_optimizationLevel
● layout_editor_absoluteX
● layout_editor_absoluteY
● layout_constraintBaseline_creator
● layout_constraintTop_creator
● layout_constraintRight_creator
● layout_constraintLeft_creator
● layout_constraintBottom_creator

【参阅博客:http://blog.chengyunfeng.com/?p=1030#ixzz5P4qMkNW7】


附:Android Space一个轻量级的创造空隙的控件

Android高级应用开发详解笔记(约束布局ConstraintLayout保姆级)22.1.28 | 优快云创作打卡 约束布局详解笔记,配套案例,文尾还有小彩蛋! 阅读详情

相关推荐

Android ConstraintLayout用法全解析

ConstraintLayout 用法全解析 文章目录ConstraintLayout 用法全解析前言一、 什么是ConstraintLayout?二、 ConstraintLayout的优缺点?2.1 优点2.1 缺点三、 基本使用方法3.1 最基础使用 --- 位置约束3.2 文字基线对齐3.3 居中和bias百分比偏移3.4 角度约束3.5 margin 和 goneMargin3.6 0dp(MATCH_CONSTRAINT)与组件大小3.7 0dp与宽高比例3. 8 Chains(约束链)3.9

weixin_43864176的博客 4786

ConstraintLayout 高级特性,工具总结

layout_constraintWidth 用法: xml中 app:layout_constrainedWidth="true" 作用:使得该view的宽受限于他的约束 app:layout_constrainedHeight="true"同理 一个wrapcontent的view 的宽度随着内容变多最终是等于parent的宽度的 但实际上它的宽度不应改如此 eg1: 水平方向上 v1 leftToLeft = parent ,rightToLeft = v2 而v2 rightToRight = p

weixin_44618248的博客 1834

5.44GHz超高精度!STM32G474的HRTIM时钟配置避坑指南

本文深入解析STM32G474内置高分辨率定时器的时钟配置要点,帮助工程师避开常见陷阱。文章详细阐述了从系统时钟到5.44GHz等效时基的路径,重点分析了预分频器乘法器、周期计算溢出、影子寄存器同步等关键配置,并结合实测波形对比,确保HRTIM在电机控制、数字电源等精密应用中发挥极限性能。

book8的博客 524

android 控件权重,Android高手进阶(十九) - ConstraintLayout入门与实践

ConstraintLayoutA.布局xml 代码不要记,看一遍就够了java一.居中于父容器app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBott...

weixin_42638178的博客 863

保姆级避坑指南:在Ubuntu 22.04上成功复现VMamba模型(附完整环境依赖清单)

本文提供了在Ubuntu 22.04上复现VMamba模型的详细指南,包括环境准备、CUDA与PyTorch的精确匹配、依赖安装的疑难杂症解决以及完整环境清单。特别针对Linux系统下的环境复现问题,提供了实用的避坑技巧和验证方法,帮助开发者高效完成VMamba模型的部署。

weixin_29083373的博客 265

【开关电源篇】开关电源——只需这三个阶段,从电源小白到维修大神

🔌 该篇为的原创文章跳转目录,小二持续更新跳转链接,尽情关注!

2301_81299416的博客 2397

Android ConstraintLayout

layout_constraintDimensionRatio="16:9" 设置宽高比 比如 16:9 但是宽和高至少有一个为0dp,也可以配合"W:1:1" 表示宽计算出来,分配高度,或者"H,2:1" 表示高度计算出需要分配宽度。app:layout_constraintBaseline_toBaselineOf="@id/image_1" 基准线对齐。app:layout_constraintCircle="@id/image_1" //控件。

qq_29769851的博客 1358

数据字典实战:如何用Excel快速搭建你的第一个数据字典(附模板下载)

本文针对中小团队在软件开发中面临的术语不一致问题,提供了一套使用Excel快速搭建数据字典的实战指南。文章详细讲解了核心字段设计、填充示例、高阶技巧及团队协作维护流程,旨在通过这一轻量级工具统一团队共识、提升开发效率,并附有实用模板下载。

weixin_29303701的博客 382

【android】小知识点整理qwq(三):从线性布局到 ConstraintLayout 约束,再顺手把 SQLite Cursor 捋一遍

从 LinearLayout 嵌套痛点切入,用 layout_constraintTop_toBottomOf 把四层布局压到两层,再顺手捋清 SQLite Cursor 的 moveToFirst 与 close 坑。文中给出可直接复制的 XML、SQL 与 Kotlin 代码,并附改一处跑一次看日志的核对方法。接入远程模型服务可参考 TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 配置三件套。

weixin_34547628的博客 194

基于微博API与Scrapy-Redis的城市情绪地图数据爬取实战

本文详细介绍了如何利用Python爬虫技术从微博平台获取用户发布内容,用于构建城市情绪地图的毕业设计项目。文章涵盖了微博API的调用、Scrapy-Redis分布式爬虫架构、数据清洗与存储、反爬虫策略应对以及情绪分析预处理等关键技术,提供了完整的代码实现和实战经验。python复制下载# items.py"""清洗文本数据"""if text:# 移除HTML标签# 移除多余空白字符"""解析微博日期格式"""

2201_76125261的博客 446

【AI大模型】核心基石:Transformer架构入门通俗完整解读

文章摘要: Transformer架构是AI大模型(如GPT、Llama等)的核心基石,彻底颠覆了传统RNN/LSTM的逐字计算模式,通过自注意力机制实现全局并行运算和长文本语义理解。本文用通俗语言拆解Transformer的核心模块:位置编码保留语序、多头注意力捕捉上下文关联、掩码机制确保生成逻辑、残差连接稳定训练,并搭配极简PyTorch代码演示Decoder架构的逐字生成过程。Transformer的并行性、可堆叠性和全局注意力优势,使其成为千亿参数大模型的基础。理解Transformer是掌握大模型

unber的博客 44

ConstraintLayout(约束布局)使用整理

ConstraintLayout里面的属性太多不容易记住,最近逛B站发现一个阿里P7的大神讲解的课,自己整理记录一下。 一、ConstraintLayout优点: 1、解决了布局的层级嵌套问题 2、布局适配度较高:主要体现在bias(偏移量)属性 二、常用属性(ConstrintLayout相当于是加强版的RelativeLayout) 约束布局最少需要约束控件的两个方向的位置,即水平方向和垂直方向各一条边 1、与RelativeLayout差异:RelativeLayout包裹的控件的相对位置

jsxin0816的博客 2498

APP签名验证全栈破解:Frida Hook绕过+算法逆向+Python一键调用(附可运行脚本)

做过APP逆向和爬虫的同学,肯定都被签名验证折磨过:改了一行代码重新打包,APP直接闪退;抓包看到接口有个sign参数,翻遍JS找不到加密逻辑;好不容易找到加密函数,一调用就崩溃。客户端APK签名校验服务端接口签名验证。前者防止你篡改APP,后者防止你伪造请求。很多人卡在第一步,改完APK就闪退,根本没机会碰接口。本文基于真实项目实战,分享一套通用的签名验证破解方案。从客户端APK签名校验的Frida Hook绕过,到服务端sign算法的逆向还原,最后用Python实现一键调用。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 965

ConstraintLayout 约束布局的几个新特性笔记整理

1.约束比(偏移比率) 使用前提:控件的四个方向都被约束 属性/栗子 参数 说明 app:layout_constraintHorizontal_bias=&quot;0.3&quot; float 水平约束比 app:layout_constraintVertical_bias=&quot;0.3&quot; float 竖直约束比 2.宽高比 使用前提:控件宽高指定其一0dp表示待约束(比

Kosmos 2442

069_死区效应对输出电压畸变的补偿思路

死区效应导致逆变器输出电压在过零点出现台阶畸变,引发THD升高。其本质是死区期间续流二极管钳位造成的非线性误差,与电流方向、负载大小、母线电压耦合。补偿需结合前馈(基于电流方向自适应调整偏置)与反馈(抑制残余谐波),关键在于准确判断电流方向(采用滞环滤波避免跳变)、合理设置补偿量(随负载动态调整),并注意补偿位置、极性及限幅防漂移。调试应通过差分探头、FFT频谱等手段验证效果,最终实现全负载范围内的低畸变输出。

2401_88858637的博客 22

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android ConstraintLayout 约束布局

前提条件是至少有一个尺寸设置为0dp,然后通过layout_constraintDimentionRatio属性设置宽高比。layout_constraintWidth_min和layout_constraintHeight_min:设置最小值。layout_constraintWidth_max和layout_constraintHeight_max:设置最大值。以薪资待遇为基础,以发展为最终目标,要在高薪资的地方,谋求最好的发展!以薪资待遇为基础,以发展为最终目标,要在高薪资的地方,谋求最好的发展!

2301_79655576的博客 769

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

最全Android 约束布局(ConstraintLayout)详解,2024年最新面试让分享一件趣事

算法知识点繁多,企业考察的题目千变万化,面对越来越近的“金九银十”,我给大家准备好了一套比较完善的学习方法,希望能帮助大家在有限的时间里尽可能系统快速的恶补算法,通过高效的学习来提高大家面试中算法模块的通过率。这一套学习资料既有文字档也有视频,里面不仅仅有关键知识点的整理,还有案例的算法相关部分的讲解,可以帮助大家更好更全面的进行学习,二者搭配起来学习效果会更好。部分资料展示:有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。

2401_84556528的博客 873

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Jetpack Compose 约束布局实战:ConstraintLayout 核心 API 与调试

在 Android 声明式 UI 开发中,布局设计直接影响界面性能与代码可维护性。传统的线性布局(Column、Row)在处理复杂控件关系时容易产生深层嵌套,增加测量与组合成本。约束布局(ConstraintLayout)通过描述控件间的相对位置关系,将嵌套层级转化为平直的约束网络,从而优化布局性能并提升可读性。作为一种成熟的 Android 布局方案,它支持 Guideline、Barrier、链式约束等高级能力,适用于动态文本对齐、比例定位和复杂相对布局等场景。理解约束布局的适用边界与调试方法,是工程实

weixin_33827590的博客 380

详解Android ConstraintLayout 约束布局的用法 整理

ConstraintLayout 完全解析 快来优化你的布局吧_鸿洋_的博客-优快云博客_constraintlayout本文已在我的公众号hongyangAndroid原创首发。 转载请标明出处: http://blog.youkuaiyun.com/lmj623565791/article/details/78011599 本文出自张鸿洋的博客 本文已在我的公众号hongyangAndroid原创首发,文章合集。一、概述ConstraintLayout出现有一段时间了,不过一直没有特别去关注,https://bl

wodexiaochengxu的博客 644

Android 约束布局(ConstraintLayout)1.1.0 版详解

前言 准备 Circular Positioning Enforcing constraints Dimensions Margins and chains Optimizer Barrier Group Placeholder 总结 转载请标明作者和出处:http://airsaid.github.io/20180422/Android-ConstraintLayout-...

Airsaid 4629

2024年安卓最全Android ConstraintLayout 约束布局,阿里hr面试问题

我这里整理了一份完整的学习思维以及Android开发知识大全PDF。当然实践出真知,即使有了学习线路也要注重实践,学习过的内容只有结合实操才算是真正的掌握。

2401_84561736的博客 1114

ConstraintLayout核心用法详解(二):尺寸约束与链约束

2016年Google推出了ConstraintLayout布局,它可以大大提高UI渲染和减少卡顿。本文整理了ConstraintLayout在尺寸约束和链约束方面的使用方法。

ITMonkeyKing的博客 267

Android 约束布局(ConstraintLayout)1

给大家送上我成功跳槽复习中所整理的资料,由于文章篇幅有限,所以只是把题目列出来了网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!尝辄止,不再深入研究,那么很难做到真正的技术提升。**

2401_84545618的博客 529

Android布局优化:ConstraintLayout约束机制、动态布局与性能实践

在Android界面开发中,布局层级直接影响渲染性能与维护成本。传统LinearLayout和RelativeLayout的多层嵌套往往导致measure次数增多、滚动掉帧明显;ConstraintLayout通过方向约束、Bias、Guideline、Barrier与Chain等机制,将View树大幅压平,兼顾灵活定位与性能优化。理解0dp在约束体系中的MATCH_CONSTRAINT语义、掌握GoneMargin规则,可以有效规避约束冲突;借助ConstraintSet还能实现动态布局与过渡动画。无论是

weixin_29208077的博客 204

ConstraintLayout优化布局-上-Android可视化界面布局

  转载自:http://blog.youkuaiyun.com/seu_calvin/article/details/55522706      感谢博主SEU_Calvin的整理和详细介绍。   0. 前言 ConstraintLayout是Android Studio 2.2中主要的新增功能之一,我们都知道在传统的Android开发中,界面基本主要是靠编写XML代码完成的,虽然Android S...

顾_小白的博客 8707

ConstraintLayout完全指南:告别嵌套层级,用约束构建高效Android布局

Android界面开发中,布局方式直接决定渲染效率与后期维护成本。传统LinearLayout、RelativeLayout多层嵌套在复杂页面中容易造成层级过深、测量递归耗时、控件位置调整牵一发动全身。ConstraintLayout以约束关系定义控件位置,通过相对对齐、Guideline百分比定位、Barrier动态屏障、Chain分布策略等机制,在扁平视图树中实现复杂界面,显著提升渲染性能与适配能力。无论是个人中心卡片、列表Item还是动态显隐场景,都能减少嵌套层级并增强布局可读性。围绕约束系统的核心用

weixin_28711397的博客 310
上一篇: 用 layer-list 实现指定边际的边框
下一篇: 有关 android:text 的填坑备忘
OneDeveloper
博客等级 码龄9年 61粉丝 161原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值