Android Jetpack Compose - Snackbar、Box

Snackbar

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

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

2、基本使用
kotlin 复制代码
val scope = rememberCoroutineScope()
val snackbarHostState = remember { SnackbarHostState() }
var desc by remember { mutableStateOf("") }

Box(modifier = Modifier.fillMaxSize()) {
    Column(
        modifier = Modifier.fillMaxSize(),
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Button(
            onClick = {
                scope.launch {
                    val reuslt = 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、基本介绍
kotlin 复制代码
@Composable
inline fun Box(
    modifier: Modifier = Modifier,
    contentAlignment: Alignment = Alignment.TopStart,
    propagateMinConstraints: Boolean = false,
    content: @Composable BoxScope.() -> Unit
)
参数 说明
modifier 设置基础属性
contentAlignment 设置子元素的默认对齐方式
propagateMinConstraints 设置是否将最小约束传递给子元素
content 主要内容区域
2、基本使用
  1. Box 的基本使用
kotlin 复制代码
Box(
    modifier = Modifier
        .size(200.dp)
        .background(Color.LightGray)
) {
    Text("test1", modifier = Modifier.align(Alignment.BottomStart))
    Text("test2", modifier = Modifier.align(Alignment.TopEnd))
}
kotlin 复制代码
Box(modifier = Modifier.fillMaxSize()) {
    Text(
        text = "居中文本",
        modifier = Modifier.align(Alignment.Center)
    )

    Button(
        onClick = { },
        modifier = Modifier.align(Alignment.BottomCenter)
    ) {
        Text("底部按钮")
    }
}
  1. 使用 contentAlignment
kotlin 复制代码
Box(
    modifier = Modifier
        .size(200.dp)
        .background(Color.LightGray),
    contentAlignment = Alignment.Center,
) {
    Text("test")
}
  1. 子元素使用 matchParentSize 函数,填充父元素
kotlin 复制代码
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
kotlin 复制代码
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
kotlin 复制代码
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
kotlin 复制代码
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. 后声明的子元素绘制在先声明的子元素之上
kotlin 复制代码
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 值越大,层级越高
kotlin 复制代码
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)
    )
}
相关推荐
好好研究11 小时前
总结SSM设置欢迎页的方式
xml·java·后端·mvc
Hui Baby11 小时前
java -jar 启动原理
java·pycharm·jar
weixin_5112552111 小时前
更新jar内资源和代码
java·jar
木井巳11 小时前
【递归算法】验证二叉搜索树
java·算法·leetcode·深度优先·剪枝
不当菜虚困11 小时前
windows下HSDB导出class文件报错【java.io.IOException : 系统找不到指定的路径。】
java·开发语言
小马爱打代码11 小时前
Spring Boot:第三方 API 调用的企业级容错设计
java·spring boot·后端
2601_9498333911 小时前
flutter_for_openharmony口腔护理app实战+意见反馈实现
android·javascript·flutter
峥嵘life12 小时前
Android 16 EDLA测试STS模块
android·大数据·linux·学习
草履虫建模12 小时前
A13 String 详解:不可变、常量池、equals 与 ==、性能与常见坑
java·开发语言·spring·jdk·intellij-idea·java基础·新手
TheNextByte112 小时前
如何打印Android手机联系人?
android·智能手机