日常开发中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