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 的工作原理而无法再次改变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/685361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开关电源电路主要元器件基础知识详解

在学习电子电路过程中,电源我们无法绕开的一个重要部分,很多时候,故障就出现在电源部分,特别是开关电源。开关电源电路主要是由熔断器、热敏电阻器、互感滤波器、桥式整流电路、滤波电容器、开关振荡集成电路、开关变压器、光耦合…

文件管理大师:深入解析Linux的文件与目录操控

目录 一、文件命名规则 1、可以使用哪些字符? 2、文件名的长度 3、Linux文件名大小写 4、Linux文件扩展名 二、文件管理命令 1、目录创建/删除 mkdir创建目录 直接创建文件夹 创建多个文件夹 递归创建写法 总结mkdir 删除空目录 2、文件创建、删除 touch创建文…

Camtasia 2024.3.7 Mac功能强大的屏幕录制和视频编辑软件

Camtasia 2024.3.7 是一款功能强大的屏幕录制和视频编辑软件,广泛用于创建教育、培训、演示和演讲等各种视频内容。它具有直观的用户界面和丰富的功能,使用户能够轻松地录制屏幕动画、添加音频、视频、文本和效果,并进行高质量的视频编辑和制…

云计算基础-虚拟化概述

虚拟化概述 虚拟化是一种资源管理技术,能够将计算机的各种实体资源(如CPU、内存、磁盘空间、网络适配器等)予以抽象、转换后呈现出来并可供分割、组合为一个或多个逻辑上的资源。这种技术通过在计算机硬件上创建一个抽象层,将单台…

【从Python基础到深度学习】 8. VIM两种状态

一、安装 sudo apt install vim 二、VIM两种模式 - 命令状态/编辑状态 1.1 进入/退出VIM 进入VIM vim 退出vim :q <enter> 2.2 根目录下添加配置文件 window下创建vimrc类型文件内容如下&#xff1a; set nu set cursorline set hlsearch set tabstop4 使用Wins…

14-k8s控制器资源-rs控制器replicasets

replicaset副本控制器&#xff0c;简称&#xff1a;rs控制器&#xff1b; 用法&#xff1a;与rc控制器“几乎”相同&#xff1b; 能力&#xff1a;可以指定pod的副本始终存活&#xff0c;相比于rc控制器&#xff1b;支持标签匹配&#xff0c;也支持标签表达式 注意&#xff1a;…

ssm的网上招聘系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; ssm的网上招聘系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMv…

platformio 提示 fatal error: TimeLib.h: No such file or directory 的解决方案

在platformio编译arduino项目的时候&#xff0c;如果提示fatal error: TimeLib.h: No such file or directory&#xff0c;解决方法有2&#xff1a; 方法1&#xff1a; 在项目的platformio.ini文件中&#xff0c;添加 lib_deps # Using library Id44方法2&#xff1a; 通过…

java的面向对象编程(oop)——认识枚举

前言 打好基础&#xff0c;daydayup! 枚举 1&#xff0c;认识枚举&#xff1a; 枚举是一种特殊类&#xff0c;用enum语句修饰。与普通类不同的是&#xff1a;枚举类的第一行只能写一些合法的标识符&#xff08;名称&#xff09;&#xff0c;多个名称用逗号隔开。这些标识符&a…

后端接口如何部署到前端

先跑通后端 把后端接口路径写入前端两个env.js中的BASE_API 这里以后要替换成个人域名,目前就可以对前端进行打包,改了代码记得先重新打包

安卓TextView 拖动命名

需求&#xff1a;该布局文件使用线性布局来排列三个文本视图和一个按钮&#xff0c;分别用于显示两个动物名称以及占位文本视图。在占位文本视图中&#xff0c;我们为其设置了背景和居中显示样式&#xff0c;并用其作为接收拖放操作的目标 效果图&#xff1b; 实现代码 第一布…

如何查找Windows的桌面文件夹?这里提供详细步骤

当你的电脑上有不同的用户时&#xff0c;Windows 11、10、…上的桌面文件夹或桌面目录特别有用&#xff0c;那么哪里才是真正的桌面文件夹目录。 自己的Windows桌面目录 1、启动Windows资源管理器 2、按F4键并输入%UserProfile% 3、点击桌面 这是你个人桌面的正确文件夹路径…

【送码】【IOS付费榜92名】春节不打烊,功德加倍攒

整体效果概览图 船新玩法&#xff0c;换个姿势攒功德 竞品玩法 过于简单&#xff1a;都是敲敲&#xff0c;然后设置里换换木鱼样式、音色等 本APP玩法 功德上云&#xff1a;敲击之后&#xff0c;会将所积攒的功德上传至fo祖云端 功德可视化&#xff1a;每日功德、3D功德地…

Calendar的使用(Java)

直接从需求来理解&#xff1a;将2024年2月16日增加一个月 如果不使用Calendar的话&#xff0c;我们需要定义字符串记住这个日期&#xff0c;然后把字符串解析成Date日期对象&#xff0c;通过Date日期对象获取其毫秒值&#xff0c;然后增加一个月的毫秒值&#xff0c;再格式化时…

东莞添威电子开关电源测控软件开发

加我微信hezkz17&#xff0c;可学习嵌入式开关电源开发技术进答疑群 1 ATE 2 开关电源产品

2024年!PyCharm快捷键大全

收藏&#xff01;PyCharm快捷键大全 工欲善其事必先利其器&#xff0c;PyCharm 是最popular的Python开发工具&#xff0c;它提供的功能非常强大&#xff0c;是构建大型项目的理想工具之一&#xff0c;如果能挖掘出里面实用技巧&#xff0c;能带来事半功倍的效果。 本文主要向大…

try catch中的finally代码一定会执行吗?

1.正常情况 正常运行的情况下&#xff0c;finally 中的代码是一定会执行的&#xff0c;但是&#xff0c;如果遇到以下异常情况&#xff0c;那么 finally 中的代码就不会继续执行了&#xff1a; 程序在 try 块中遇到 System.exit() 方法&#xff0c;会立即终止程序的执行&#…

Kubernetes(K8S)集群部署实战

目录 一、准备工作1.1、创建3台虚拟机1.1.1、下载虚拟机管理工具1.1.2、安装虚拟机管理工具1.1.3、下载虚Centos镜像1.1.4、创建台个虚拟机1.1.5、设置虚拟机网络环境 1.2、虚拟机基础配置&#xff08;3台虚拟机进行相同处理&#xff09;1.2.1、配置host1.2.2、关闭防火墙1.2.3…

构造题记录

思路&#xff1a;本题要求构造一个a和b数组相加为不递减序列&#xff0c;并且b数组的极差为最小的b数组。 可以通过遍历a数组并且每次更新最大值&#xff0c;并使得b数组为这个最大值和当前a值的差。 #include <bits/stdc.h> using namespace std; #define int long lon…

【BUUCTF 加固题】Ezsql 速通

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …