Android ConstraintLayout 之ConstraintSet

日常开发中ConstraintLayout(约束布局)用到的越来越多,xml布局家常便饭了,但是牵扯到代码中动态修改布局的属性还是用到LayoutParams.ConstraintSet用的很少,所以就整理下ConstraintSet的一些设置的方法,方便后边使用

方法属性

方法名 作用说明 参数简述 备注
clone(layout) 复制已有 ConstraintLayout 的约束信息 layout: ConstraintLayout 用于基于现有布局修改
applyTo(layout) 应用当前 ConstraintSet 到目标 ConstraintLayout layout: ConstraintLayout 动态生效修改
connect(startId, startSide, endId, endSide, margin=0) 连接两个控件或控件与父布局的边建立约束 startId, startSide, endId, endSide, margin margin 默认 0,指定间距
clear(viewId, side) 清除控件指定方向的约束 viewId, side 避免约束冲突
constrainWidth(viewId, value) 设置控件宽度 viewId, value 支持固定值或 MATCH_CONSTRAINT
constrainHeight(viewId, value) 设置控件高度 viewId, value 支持固定值或 MATCH_CONSTRAINT
setDimensionRatio(viewId, ratio) 设置控件宽高比例 viewId, "W:H" 格式字符串 例如 "16:9", "1:1"
setMargin(viewId, side, value) 设置控件在指定方向的 margin viewId, side, value 控件可见时的间距
setGoneMargin(viewId, side, value) 设置控件 GONE 时指定方向的 margin viewId, side, value 控件隐藏时生效
setHorizontalBias(viewId, bias) 设置控件水平方向偏移比例 viewId, bias(0~1) 0为左,1为右
setVerticalBias(viewId, bias) 设置控件垂直方向偏移比例 viewId, bias(0~1) 0为顶,1为底

1.ConstraintSet是什么

ConstraintSet 是 Android ConstraintLayout 提供的一个非常好用的工具类,它可以让你在 Java/Kotlin 代码中动态修改布局约束,而不必重新加载 XML 布局。

ConstraintSet是ConstraintLayout的一个工具类,可以在代码中动态修改属性.

2.ConstraintSet的使用

scss 复制代码
val constraintSet = ConstraintSet()
constraintSet.clone(constraintLayout) // 克隆当前布局的约束
// 这里修改各种属性
constraintSet.connect(viewId, ConstraintSet.LEFT, ConstraintSet.PARENT_ID, ConstraintSet.LEFT, margin)
constraintSet.applyTo(constraintLayout) // 应用修改

3.ConstraintSet 的方法

scss 复制代码
// 1. 创建 ConstraintSet 对象
ConstraintSet constraintSet = new ConstraintSet()

// 2. 克隆已有 ConstraintLayout 的约束信息(复制当前状态)
constraintSet.clone(ConstraintLayout)

3.1 clone(layout) 克隆一个 ConstraintLayout

scss 复制代码
// 1. 创建 ConstraintSet 对象
ConstraintSet constraintSet = new ConstraintSet()
constraintSet.clone(ConstraintLayout)

3.2 applyTo(layout) 应用当前ConstraintSet到ConstraintLayout

scss 复制代码
val constraintSet = ConstraintSet()
constraintSet.clone(constraintLayout) // 克隆当前布局的约束
// 这里修改各种属性
constraintSet.connect(viewId, ConstraintSet.LEFT, ConstraintSet.PARENT_ID, ConstraintSet.LEFT, margin)
constraintSet.applyTo(constraintLayout) // 应用修改

3.3 connect(startID, startSide, endID, endSide, margin=0) 连接两个控件的边,建立约束

arduino 复制代码
// 3.3 连接两个控件的边界,建立约束关系,支持设置 margin
constraintSet.connect(
    startViewId, startSide,    // 起点控件及边
    endViewId, endSide,        // 终点控件及边(可以是父控件ID)
    margin                     // 可选,间距
)

3.4 clear(viewId, anchor) 清除控件某个方向上的约束

scss 复制代码
// 3.4 清除某个控件指定方向的约束
constraintSet.clear(viewId, SIDE)

3.5 constrainWidth(viewId, value) 设定控件宽度

scss 复制代码
// 3.5 设置控件宽度(单位 px)
constraintSet.constrainWidth(viewId, widthPx)

3.6 constrainHeight(viewId, value)

scss 复制代码
// 3.6 设置控件高度(单位 px)
constraintSet.constrainHeight(viewId, heightPx)

3.7 setDimensionRatio(viewId, ratio) 设置宽高比例

arduino 复制代码
// 3.7 设置宽高比例(字符串格式 "W:H")
constraintSet.setDimensionRatio(viewId, "16:9")

3.8 setMargin(viewId, anchor, value) 设置控件在某个方向的 margin

scss 复制代码
// 3.8 设置控件某个方向的 margin
constraintSet.setMargin(viewId, side, marginPx)

3.9 setGoneMargin(viewId, anchor, value) 当控件 GONE 时,设置 margin

scss 复制代码
// 3.9 设置控件某个方向的 gone 时的 margin
constraintSet.setGoneMargin(viewId, side, marginPx)

3.10 setHorizontalBias(viewId, bias) 设置控件水平方向偏移,0 左,1 右

scss 复制代码
// 3.10 设置控件水平方向偏移,范围 0.0(左)~ 1.0(右)
constraintSet.setHorizontalBias(viewId, bias)

3.11 setVerticalBias(viewId, bias) 设置控件垂直方向偏移,0 顶部,1 底部

scss 复制代码
// 3.11 设置控件水平方向偏移,范围 0.0(左)~ 1.0(右)
constraintSet.setVerticalBias(viewId, bias)

总结

ConstraintSet 是 Android ConstraintLayout 中用于动态修改布局约束的核心类,能在运行时方便地调整视图的位置、大小和关联关系。记录一下 方便cv

相关推荐
Mr数据杨7 小时前
【Codex】用学生入学评估模块建立新生能力画像
android·java·javascript·django·codex·项目开发
●VON7 小时前
谁小时候不想要一个游戏修改器?我把电脑 Skill 做成了 Android 小助手
android·游戏·电脑
刃神太酷啦8 小时前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb
里欧跑得慢8 小时前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
IT毕设实战小研8 小时前
基于安卓的空气质量查询系统
android·大数据·vue.js·爬虫·python·django·课程设计
雨声不在10 小时前
docker-android Android 16 支持与编译修改
android
天空之城--16 小时前
【无标题】
android
mmsx17 小时前
osmdroid 接入谷歌影像底图:瓦片 URL 拼接与多域名轮询实战
android·osmdroid
ZYJCSZKJ17 小时前
基于大语言模型的地域实体语义增强:生成式引擎优化(GEO)中的多模态内容生成实践
android·人工智能·语言模型
ssshooter17 小时前
Tauri + GitHub Actions 自动化发布 Android APK 技术总结
android·github·android studio