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 參考資料。
重點
actionLabel = "Action":設定動作按鈕文字。duration = SnackbarDuration.Indefinite:持續顯示 Snackbar,直到使用者或程式關閉為止。SnackbarResult.ActionPerformed:表示使用者點選了 Snackbar 的動作按鈕。SnackbarResult.Dismissed:表示使用者關閉 Snackbar,但未點選動作按鈕。