唯客微博客

专注于计算机,嵌入式领域的技术

0%

Jetpack Compose组件-Snackbar

Jetpack Compose组件-Snackbar

Snackbar

将很多的组件摆放在这个平面之上,我们可以设置这个平面的边框,圆角,颜色等等。

Surface实际上是Box的重新包装。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@Composable
fun Snackbar(
// Snackbar 数据, 来自SnackbarHost的回调
snackbarData: SnackbarData,
// 修饰符
modifier: Modifier = Modifier,
// 动作放在单独一行,在长文本时设置为true,action位于右下角,否则在右侧
actionOnNewLine: Boolean = false,
// 形状
shape: Shape = MaterialTheme.shapes.small,
// 背景颜色
backgroundColor: Color = SnackbarDefaults.backgroundColor,
// 内容颜色
contentColor: Color = MaterialTheme.colors.surface,
// 动作颜色
actionColor: Color = SnackbarDefaults.primaryActionColor,
// 高度(阴影)
elevation: Dp = 6.dp
): Unit

@Composable
fun Snackbar(
// 修饰符
modifier: Modifier = Modifier,
// 动作回调
action: (@Composable () -> Unit)? = null,
// 动作放在单独一行,在长文本时设置为true,action位于右下角,否则在右侧
actionOnNewLine: Boolean = false,
// 形状
shape: Shape = MaterialTheme.shapes.small,
// 背景颜色
backgroundColor: Color = SnackbarDefaults.backgroundColor,
// 内容颜色
contentColor: Color = MaterialTheme.colors.surface,
// 高度(阴影)
elevation: Dp = 6.dp,
content: @Composable () -> Unit
): Unit

SnackbarHost

1
2
3
4
5
6
7
8
9
@Composable
fun SnackbarHost(
// 状态
hostState: SnackbarHostState,
// 修饰符
modifier: Modifier = Modifier,
// Snackbar
snackbar: @Composable (SnackbarData) -> Unit = { Snackbar(it) }
): Unit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
val scaffoldState = rememberScaffoldState()
val scope = rememberCoroutineScope()
Scaffold(
scaffoldState = scaffoldState,
snackbarHost = {
// reuse default SnackbarHost to have default animation and timing handling
SnackbarHost(it) { data ->
// custom snackbar with the custom border
Snackbar(
modifier = Modifier.border(2.dp, MaterialTheme.colors.secondary),
snackbarData = data,
actionOnNewLine = false
)
}
},
floatingActionButton = {
var clickCount by remember { mutableStateOf(0) }
ExtendedFloatingActionButton(
text = { Text("Show snackbar") },
onClick = {
scope.launch {
scaffoldState.snackbarHostState.showSnackbar(
"Loooooooooooooooooooong Snackbar # ${++clickCount}",
actionLabel = "action",
duration = SnackbarDuration.Indefinite
)
}
}
)
},
content = { innerPadding ->
Text(
text = "Custom Snackbar Demo",
modifier = Modifier
.padding(innerPadding)
.fillMaxSize()
.wrapContentSize()
)
}
)
-------------本文结束感谢您的阅读-------------

本文标题:Jetpack Compose组件-Snackbar

文章作者:Vinx

发布时间:2023年01月13日 - 10:31

最后更新:2023年09月19日 - 08:39

原始链接:https://blog.vinkvin.com/post/71/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。