news 2026/6/25 19:23:52

Android Jetpack Compose - Snackbar、Box

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android Jetpack Compose - Snackbar、Box

Snackbar

1、基本介绍
  1. Snackbar 是一种轻量级反馈机制,它用于提供有关操作或动作的反馈

  2. Snackbar 会在显示几秒后消失,也可以通过用户交互消失,包含一个可选的用户操作

2、基本使用
valscope=rememberCoroutineScope()valsnackbarHostState=remember{SnackbarHostState()}vardescbyremember{mutableStateOf("")}Box(modifier=Modifier.fillMaxSize()){Column(modifier=Modifier.fillMaxSize(),horizontalAlignment=Alignment.CenterHorizontally){Button(onClick={scope.launch{valreuslt=snackbarHostState.showSnackbar(message="这是一条 Snackbar",actionLabel="关闭",duration=SnackbarDuration.Short)when(reuslt){SnackbarResult.ActionPerformed->{desc="Snackbar 手动关闭"}SnackbarResult.Dismissed->{desc="Snackbar 自动关闭"}}}desc="Snackbar 显示"}){Text("显示 Snackbar")}Text(desc)}SnackbarHost(modifier=Modifier.align(Alignment.BottomCenter).padding(16.dp),hostState=snackbarHostState)}

Box

1、基本介绍
@ComposableinlinefunBox(modifier:Modifier=Modifier,contentAlignment:Alignment=Alignment.TopStart,propagateMinConstraints:Boolean=false,content:@ComposableBoxScope.()->Unit)
参数说明
modifier设置基础属性
contentAlignment设置子元素的默认对齐方式
propagateMinConstraints设置是否将最小约束传递给子元素
content主要内容区域
2、基本使用
  1. Box 的基本使用
Box(modifier=Modifier.size(200.dp).background(Color.LightGray)){Text("test1",modifier=Modifier.align(Alignment.BottomStart))Text("test2",modifier=Modifier.align(Alignment.TopEnd))}
Box(modifier=Modifier.fillMaxSize()){Text(text="居中文本",modifier=Modifier.align(Alignment.Center))Button(onClick={},modifier=Modifier.align(Alignment.BottomCenter)){Text("底部按钮")}}
  1. 使用 contentAlignment
Box(modifier=Modifier.size(200.dp).background(Color.LightGray),contentAlignment=Alignment.Center,){Text("test")}
  1. 子元素使用 matchParentSize 函数,填充父元素
Box(modifier=Modifier.size(200.dp)){Box(modifier=Modifier.matchParentSize().background(Color.Red.copy(alpha=0.3f)))Text("test",modifier=Modifier.align(Alignment.Center))}
3、使用 propagateMinConstraints
  1. 外部灰色 Box 的最小约束不会传递给子元素,导致内部红色 Box 尺寸为 0dp,外部灰色 Box 受尺寸范围与内部红色 Box 尺寸影响,尺寸为 100dp
Box(modifier=Modifier.background(Color.LightGray).widthIn(min=100.dp,max=300.dp).heightIn(min=100.dp,max=300.dp)){Box(modifier=Modifier.background(Color.Red.copy(alpha=0.3f)))}
  1. 外部灰色 Box 的最小约束会传递给子元素,导致内部红色 Box 尺寸为 100dp,外部灰色 Box 受尺寸范围与内部红色 Box 尺寸影响,尺寸为 100dp
Box(modifier=Modifier.background(Color.LightGray).widthIn(min=100.dp,max=300.dp).heightIn(min=100.dp,max=300.dp),propagateMinConstraints=true){Box(modifier=Modifier.background(Color.Red.copy(alpha=0.3f)))}
  1. 外部灰色 Box 的最小约束会传递给子元素,内部红色 Box 自定义尺寸为 150dp,外部灰色 Box 受尺寸范围与内部红色 Box 尺寸影响,尺寸为 150dp
Box(modifier=Modifier.background(Color.LightGray).widthIn(min=100.dp,max=300.dp).heightIn(min=100.dp,max=300.dp),propagateMinConstraints=true){Box(modifier=Modifier.size(150.dp).background(Color.Red.copy(alpha=0.3f)))}
4、子元素层级
  1. 后声明的子元素绘制在先声明的子元素之上
Box(modifier=Modifier.size(200.dp).background(Color.LightGray),){Box(modifier=Modifier.size(150.dp).background(Color.Red).align(Alignment.TopStart))Box(modifier=Modifier.size(150.dp).background(Color.Green).align(Alignment.Center))}
  1. 可以使用 zIndex 控制层级,zIndex 值越大,层级越高
Box(modifier=Modifier.size(200.dp).background(Color.LightGray).zIndex(1f),){Box(modifier=Modifier.size(150.dp).background(Color.Red).align(Alignment.TopStart).zIndex(3f))Box(modifier=Modifier.size(150.dp).background(Color.Green).align(Alignment.Center).zIndex(2f))}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/16 16:00:43

Kotlin 面向对象 - 装箱与拆箱

装箱与拆箱 在 Kotlin 中,装箱与拆箱涉及基本类型与它们的可空引用类型或泛型集合中的类型转换基本类型在大多数情况下直接对应 JVM 的原始类型,不涉及装箱当它们被用作可空类型或放入泛型集合时,会自动装箱为对应的包装类// 基本类型&#x…

作者头像 李华
网站建设 2026/6/14 13:22:48

图解说明2025机顶盒刷机包下载全过程

2025机顶盒刷机全攻略:从下载到刷入,手把手带你玩转固件升级 你是不是也受够了家里的机顶盒开机满屏广告、系统卡顿、不能装第三方App?别急—— 刷机 ,可能是你最该掌握的家庭影音“神技”。 2025年,越来越多的智能…

作者头像 李华
网站建设 2026/6/17 17:37:31

工业现场UART通信故障诊断:核心要点与解决路径

工业现场UART通信故障诊断:从“换线重启”到精准排障的实战指南在一家自动化设备厂的调试车间里,工程师老张正对着一台频繁报错的温控仪发愁。PLC显示的数据时准时乱,有时跳到999℃,有时直接断连。他试过换线、重启、甚至拍了下机…

作者头像 李华
网站建设 2026/6/23 13:56:42

基于硬件ID定位未知usb设备(设备描述)的实践方法

如何一眼认出“未知USB设备(设备描述)”?从硬件ID入手的实战全解析你有没有遇到过这样的场景:插上一个调试器、传感器或自研板卡,Windows 却只在设备管理器里冷冷地回你一句——“未知USB设备(设备描述&…

作者头像 李华
网站建设 2026/6/19 12:45:56

Leetcode 99 删除排序链表中的重复元素 | 合并两个链表

1 题目 83. 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head [1,1,2] 输出:[1,2]示例 2: 输入&#x…

作者头像 李华
网站建设 2026/6/18 19:56:34

前端面试都给我死磕这个题库,三天足够了!

你花了整个周末背诵浏览器渲染原理,但面试官抛出的问题是:“当你的React应用在低端安卓机上出现滚动闪烁,而Performance面板却看不到明显Long Task时,你如何锁定是图层合并策略、合成器线程调度,还是某个CSS属性触发了…

作者头像 李华