信息提示控件组件用作显示在屏幕底部的简短通知。它会提供有关操作或行为的反馈,而不会中断用户体验。信息提示控件会在几秒钟后消失。用户也可以通过执行操作(例如点按按钮)来关闭这些消息。
请考虑以下三种可能使用信息提示控件的使用场景:
- 操作确认:用户删除电子邮件或消息后,系统会显示一个信息提示控件,以确认操作并提供撤消选项。
- 网络状态:当应用失去互联网连接时,系统会弹出一个信息提示控件,提示应用现在处于离线状态。
- 数据提交:成功提交表单或更新设置后,信息提示控件会提示更改已成功保存。
基本示例
如需实现信息提示控件,您首先需要创建 SnackbarHost,其中包含 SnackbarHostState 属性。SnackbarHostState 提供了对 showSnackbar() 函数的访问权限,您可以使用该函数来显示信息提示控件。
此挂起函数需要一个 CoroutineScope(例如
rememberCoroutineScope 返回的),并且可以调用它来响应界面事件,以便在 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 参考文档。
要点
actionLabel = "Action":设置操作按钮文本。duration = SnackbarDuration.Indefinite:使信息提示控件保持显示状态,直到用户或程序将其关闭。SnackbarResult.ActionPerformed:表示用户点击了信息提示控件的操作按钮。SnackbarResult.Dismissed:表示用户在未点击操作按钮的情况下关闭了信息提示控件。