news 2026/5/13 10:45:19

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/5/11 6:09:01

架构之最终一致性

架构之最终一致性 概述 在分布式系统中,AP、CP是不能同时满足的,这是铁律。根据CAP定理,当网络分区发生时,系统必须在一致性(Consistency)和可用性(Availability)之间做出选择。为了…

作者头像 李华
网站建设 2026/5/10 10:58:18

Batocera游戏整合包图解说明:适合全家人的怀旧游戏中心

用一个U盘,把老电视变成全家人的游戏厅:Batocera整合包实战指南 你有没有试过在某个周末的晚上,翻出尘封多年的红白机卡带,想和孩子一起玩一局《超级马里奥》?结果发现主机接口氧化、画面闪烁,折腾半小时也…

作者头像 李华
网站建设 2026/5/12 21:47:21

Excel/CSV转GIS:一键WKT转gdf、Shapefile等图层

Python数据处理:如何将Excel/CSV中的WKT文本转换为Shapefile/GeoJSON——tablegis库df_to_gdf详解 前言 在地理数据处理中,我们经常遇到一种尴尬的情况: 从数据库(PostGIS, MySQL, ClickHouse)导出的数据,或…

作者头像 李华
网站建设 2026/5/1 9:54:06

L298N驱动直流电机PWM调速核心要点解析

用L298N玩转直流电机:PWM调速从原理到实战的完整指南你有没有遇到过这种情况?精心写好代码,给电机发了启动信号,结果电机要么纹丝不动,要么“嗡嗡”作响像在抗议——最后摸一下L298N模块,烫得能煎蛋。别急&…

作者头像 李华
网站建设 2026/5/10 4:14:18

libwebkit2gtk-4.1-0安装常见问题深度剖析与解决方案

libwebkit2gtk-4.1-0 安装难题实战解析:从依赖地狱到稳定部署你有没有在某个深夜,满怀希望地敲下一行sudo apt install libwebkit2gtk-4.1-0,结果终端却冷冷抛出一串红字:The following packages have unmet dependencies:libwebk…

作者头像 李华
网站建设 2026/5/1 14:22:10

obsidian_url_clipper插件介绍

1. Obsidian URL Clipper 一个支持可视化正文选择的网页剪藏插件 1.1. 插件简介 Obsidian URL Clipper 是一款为 Obsidian 设计的网页剪藏插件,专注于解决传统网页剪藏中最棘手的问题之一: 如何稳定、准确地剪藏网页“正文内容”,而不是整页…

作者头像 李华