探索 Android 世界:揭开七大布局的神秘面纱,一篇带你快速认识【3】

书接上文探索 Android 世界:揭开七大布局的神秘面纱,一篇带你快速认识【2】-优快云博客

目录

7.2 辅助类

7.2.1 Guideline(辅助线)

7.2.2 Barrier(屏障)

7.2.3 Group(组)

7.2.4 Placeholder(占位符)

7.2.5 Flow(流式虚拟布局)

链约束

对齐约束

数量约束

7.2.6 Layer(层布局)

7.2.7 ImageFilterButton和ImageFilterView

ImageFilterView的主要功能

ImageFilterView的其他属性


7.2 辅助类

ConstraintLayout 为解决布局嵌套过深问题,提供了以下实用辅助控件,助力开发者更高效地进行布局。

7.2.1 Guideline(辅助线)

(1)作用

类似设计稿里的参考线,用于辅助定位控件,自身不可见。可设置水平或垂直方向,通过百分比、固定距离等方式确定位置,让控件对齐更灵活,避免为了特定对齐嵌套额外布局。

(2)优势

比如实现多个控件垂直方向等距排列,用水平辅助线按百分比划分区域,控件对齐辅助线,无需嵌套线性布局去设置权重,简化结构。

(3)使用

android:orientation="horizontal|vertical" <!-- 辅助线的对齐方式 --> 
app:layout_constraintGuide_percent="0-1" <!-- 距离父级宽度或高度的百分比(小数形式) --> 
app:layout_constraintGuide_begin="" <!-- 距离父级起始位置的距离(左侧或顶部) --> 
app:layout_constraintGuide_end="" <!-- 距离父级结束位置的距离(右侧或底部) -->

7.2.2 Barrier(屏障)

(1)作用

根据多个控件的边界(左、右、上、下等)动态确定自身位置,作为 “屏障” 让其他控件对齐到它,适配不同内容长度的控件布局。

(2)优势

像评论列表,头像、昵称、评论内容长度不固定,用屏障基于头像和昵称的右侧确定位置,让评论内容统一对齐屏障,无需嵌套复杂布局适配不同长度。

(3)使用

当我们创建布局时,有时会遇到布局可以根据本地化而更改的情况。这里借助有一个非常简单的例子:

constraintlayout网站中的例子,可以直接访问链接进行查看。

7.2.3 Group(组)

(1)作用

可将多个控件归为一组,统一控制它们的可见性,不用逐个设置控件 visibility,简化显示 / 隐藏逻辑。

(2)优势

比如表单提交成功后,隐藏 “提交按钮、输入框” 等多个控件,用 Group 关联后一键隐藏,比遍历设置每个控件可见性更高效,也避免布局嵌套去包裹这些控件统一控制。

(3)使用

app:constraint_referenced_ids="id,id" <!-- 加入组的控件id -->

7.2.4 Placeholder(占位符)

(1)作用

预先占好位置,运行时可将其他控件 “替换” 到该位置,用于动态切换不同控件显示,保持布局结构稳定。

(2)优势

如页面有多种状态(加载中、内容、空数据),用占位符提前占好内容区域位置,不同状态切换对应控件替换到占位符,无需嵌套多个布局切换显示,让布局更简洁。

(3)使用

7.2.5 Flow(流式虚拟布局)

Flow 是 Android ConstraintLayout 2.1.0 版本引入的强大辅助布局工具,用于解决复杂的流式布局问题。它本质上是一个虚拟容器,可以将一组控件按照流式排列(类似 FlexboxLayoutLinearLayout 的 wrap_content 效果),同时保持 ConstraintLayout 的约束能力。

(1)核心特性

  1. 流式排列:控件会按照添加顺序自动换行/列,避免手动计算位置。

  2. 支持多方向

    1. 水平方向:控件从左到右排列,超出宽度时自动换行。

    2. 垂直方向:控件从上到下排列,超出高度时自动换列。

  3. 灵活的对齐方式:支持 startendcenterspace_aroundspace_between 等对齐模式。

  4. 与 ConstraintLayout 无缝集成:Flow 本身不可见,只负责排列控件,控件仍受 ConstraintLayout 约束管理。

(2)使用

Flowconstraint_referenced_ids关联的控件是没有设置约束的,这一点和普通的链是不一样的,这种排列方式是Flow的默认方式none

链约束

链约束决定了流式布局中,控件超出一行 / 列时的换行 / 列规则,通过 app:flow_wrapMode 设置,核心模式有三种。

app:flow_wrapMode="none|chain|aligned"

链约束模式

效果描述

适用场景示例

none

(默认)

所引用的view形成一条链,水平居中,超出屏幕两侧的view不可见

控件数量少、明确希望强制在单行/列显示时用,比如固定数量的标签导航

chain

所引用的view形成一条链,超出部分会自动换行,同行的view会平分宽度

需要自动换行且每行控件均匀分布的场景,比如动态加载的标签列表、商品卡片流式排列

aligned

所引用的view形成一条链,但view会在同行同列。

对布局规整度要求高的场景,比如图片网格、表单多列排版

对齐约束

上面展示的都是相同大小的view,那么不同大小view的对齐方式,Flow也提供了相应的属性进行配置。

app:flow_verticalAlign="top|bottom|center|baseline"  <!--  顶对齐、底对齐、中心对齐、基线对齐  -->
app:flow_horizontalAlign="start|end|center"  <!--  开始对齐、结尾对齐、中心对齐  -->
数量约束

数量约束通过 app:flow_maxElementsWrap 实现,用于限制每行 / 列最多显示的控件数量,超出则自动换行 / 列。

7.2.6 Layer(层布局)

Layer继承自ConstraintHelper,是一个约束助手,相对于Flow来说,Layer的使用较为简单,常用来增加背景,或者共同动画。图层 (Layer) 在布局期间会调整大小,其大小会根据其引用的所有视图进行调整,代码的先后顺序也会决定着它的位置。

  • 如果代码在所有引用view的最后面,那么它就会在所有view的最上面,反之则是最下面。

  • 在最上面的时候如果添加背景,就会把引用的view覆盖掉。

7.2.7 ImageFilterButton和ImageFilterView

ImageFilterButtonImageFilterView 是 Android 开发中,ConstraintLayout 库提供的用于处理图片特效的控件,让开发者能更便捷地实现图片的多样视觉效果。

ImageFilterView的主要功能
<!-- 图片资源与滤镜效果 -->
app:src=""                         <!-- 基础图片源,作为背景层显示 -->
app:altSrc=""                      <!-- 替代图片源,作为前景层叠加显示 -->
app:crossfade="0-1"                <!-- 前景层透明度,默认0为全透明,1为不透明。altSrc提供的资源将会和src提供的资源通过crossfade属性形成交叉淡化效果。

<!-- 圆角处理 -->
app:round="dimension"              <!-- 以固定长度设置圆角半径,取值范围0到size/2 -->
app:roundPercent="0-1"             <!-- 以百分比设置圆角半径,取值范围0到1 -->

<!-- 图片变换效果 -->
app:imageZoom="float"              <!-- 图片缩放比例,大于1放大,小于1缩小 -->
app:imageRotate="degrees"          <!-- 图片旋转角度,以12点钟方向为0度,顺时针增加 -->
app:imagePanX="integer"            <!-- 图片在X轴方向的平移距离 -->
app:imagePanY="integer"            <!-- 图片在Y轴方向的平移距离 -->
ImageFilterView的其他属性
<!-- 图像色彩调整 -->
app:saturation="float"             <!-- 饱和度调整,1为原色,0为灰阶,>1为超饱和 -->
app:brightness="float"             <!-- 亮度调整,1为原色,0为黑色,>1为高亮 -->
app:warmth="float"                 <!-- 色温调整,1为中性,<1为冷色调,>1为暖色调 -->
app:contrast="float"               <!-- 对比度调整,1为原色,0为灰色,>1为高对比度 -->

<!-- 图像混合模式 -->
app:overlay="boolean"              <!-- 叠加模式,定义alt图像是在原始图像的顶部淡入还是交叉淡入。true为淡入,false为交叉淡入(适用于半透明对象) -->

这些辅助控件与 ConstraintLayout 结合,能大幅减少布局嵌套,让界面结构更扁平,提升渲染性能,也让布局逻辑更清晰、易维护,在处理复杂界面布局时非常实用 。

最后,希望通过这样详细的介绍,大家可以对 Android 应用程序界面的构建以及视图的设置和使用有更清晰的理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值