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

相关推荐
安卓开发者40 分钟前
Android模块化架构深度解析:从设计到实践
android·架构
雨白1 小时前
HTTP协议详解(二):深入理解Header与Body
android·http
阿豪元代码2 小时前
深入理解 SurfaceFlinger —— 如何调试 SurfaceFlinger
android
阿豪元代码2 小时前
深入理解 SurfaceFlinger —— 概述
android
CV资深专家3 小时前
Launcher3启动
android
stevenzqzq4 小时前
glide缓存策略和缓存命中
android·缓存·glide
雅雅姐4 小时前
Android 16 的用户和用户组定义
android
余辉zmh5 小时前
【MySQL基础篇】:MySQL索引——提升数据库查询性能的关键
android·数据库·mysql
BennuCTech6 小时前
Google ML Kit系列:在Android上实现OCR本地识别
android