Compose 自定义 - 约束 Constrains

官方介绍 

一、概念

是当前节点宽高的上下界(最大值和最小值)。在 Layout 阶段,当父节点测量子节点的时候会提供约束条件 Contraints 好让子元素知道自己被允许的最大最小尺寸,当子节点测量完决定自身尺寸时,需要遵循父节点给出的约束条件。

1.1 类型

对宽高可以分别设置不同类型的约束。

有边界一个区间,即包含最大值和最小值。
无界限没有约束,即0到无限大。
固定值(完全匹配)一个确切值,即最大值最小值相等。

二、Modifier 对 Contraints 的影响

.size()在遵守约束的前提下往传入值靠拢。值在区间就是该值,低于最小值就是最小值,超过最大值就是最大值。
.requiredSize()就是要忽略约束使用自己的值。例如调用 .size(100dp) 后约束为 weight[100-100dp]、height[100-100dp],再调用 .requiredSize(50dp) 后约束为 weight[50-50dp]、height[50-50dp]。
.width()、.height()相比用 size 同时设置宽高,单独设置宽或高不影响对方。
.sizeIn()

能更细粒度的控制约束。

.sizeIn(

        minWidth = 100dp,

        maxWidth = 200dp,

        minHeight = 10dp,

        maxHeight = 20dp

)

.wrapContentSize()会把宽高约束的最小值重置为0。
.fillMaxSize()会把宽高约束变为最大值。

2.1 单次调用

父容器传入的 Contraints 为 weight[100-300dp]、height[100-200dp]

在约束范围内

调用 Modifier.size(150dp),约束变成 weight[150-150dp]、height[150-150dp] 继续向下传递,此时该节点显示一个 150*150 的矩形。

小于约束范围

调用 Modifier.size(50dp),约束变成 weight[100-100dp]、height[100-100dp] 继续向下传递,该节点显示一个 100*100 的矩形。

大于约束范围

调用 Modifier.size(400dp),约束变成 weight[300-300dp]、height[200-200dp] 继续向下传递,该节点显示一个 300*200 的矩形。

2.2 多次调用

上方举例其实也解释了链式调用 .size() 为什么只有第一个生效,因为第一个已经把约束变为最大值和最小值相等的固定值,这样第二个无论传值更大或更小,都会因为遵循 Contraints 的工作原理而无法再次改变。

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值