该Snackbar组件是一个简短的通知,显示在屏幕底部。它提供有关操作或行为的反馈,而不会中断用户体验。Snackbar会在几秒钟后消失。用户也可以通过操作(例如点击按钮)将其关闭。
考虑以下三种您可能使用Snackbar的用例
- 操作确认:用户删除电子邮件或消息后,会显示Snackbar以确认操作并提供“撤销”选项。
- 网络状态:当应用程序失去互联网连接时,会弹出一个Snackbar,指出它现在已离线。
- 数据提交:成功提交表单或更新设置后,Snackbar会指出更改已成功保存。
基本示例
要实现Snackbar,您首先创建SnackbarHost
,其中包含一个SnackbarHostState
属性。SnackbarHostState
提供对showSnackbar()
函数的访问,您可以使用该函数显示Snackbar。
此挂起函数需要一个CoroutineScope
,例如使用rememberCoroutineScope
——并且可以在响应UI事件时调用,以在Scaffold
中显示Snackbar
。
val scope = rememberCoroutineScope() val snackbarHostState = remember { SnackbarHostState() } Scaffold( snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, floatingActionButton = { ExtendedFloatingActionButton( text = { Text("Show snackbar") }, icon = { Icon(Icons.Filled.Image, contentDescription = "") }, onClick = { scope.launch { snackbarHostState.showSnackbar("Snackbar") } } ) } ) { contentPadding -> // Screen content }
带有操作的Snackbar
您可以提供可选的操作并调整Snackbar
的持续时间。snackbarHostState.showSnackbar()
函数接受额外的actionLabel
和duration
参数,并返回SnackbarResult
。
val scope = rememberCoroutineScope() val snackbarHostState = remember { SnackbarHostState() } Scaffold( snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, floatingActionButton = { ExtendedFloatingActionButton( text = { Text("Show snackbar") }, icon = { Icon(Icons.Filled.Image, contentDescription = "") }, onClick = { scope.launch { val result = snackbarHostState .showSnackbar( message = "Snackbar", actionLabel = "Action", // Defaults to SnackbarDuration.Short duration = SnackbarDuration.Indefinite ) when (result) { SnackbarResult.ActionPerformed -> { /* Handle snackbar action performed */ } SnackbarResult.Dismissed -> { /* Handle snackbar dismissed */ } } } } ) } ) { contentPadding -> // Screen content }
您可以使用snackbarHost
参数提供自定义Snackbar
。有关更多信息,请参阅SnackbarHost
API参考文档。