您可以為 Snackbar
新增動作,讓使用者回覆您的訊息。這樣做時,Snackbar
會在訊息文字旁邊放置按鈕,使用者只要輕觸按鈕,就能觸發您的動作。舉例來說,電子郵件應用程式可能會在「電子郵件已封存」訊息上放置「取消」按鈕。如果使用者輕觸「undo」按鈕,應用程式就會將電子郵件從封存項目中取出。
![圖片顯示含有「UNDO」動作按鈕的 Snackbar](https://developer.android.com/static/images/ui/notifications/action_snackbar_undo.png?authuser=1&hl=zh-tw)
Snackbar
中含有復原已刪除項目的「復原」動作按鈕。如要在 Snackbar
訊息中新增動作,請定義實作 View.OnClickListener
介面的事件監聽器物件。如果使用者輕觸訊息動作,系統會呼叫監聽器的 onClick()
方法。例如,以下程式碼片段顯示了撤銷動作的事件監聽器:
Kotlin
class MyUndoListener : View.OnClickListener { fun onClick(v: View) { // Code to undo the user's last action. } }
Java
public class MyUndoListener implements View.OnClickListener { @Override public void onClick(View v) { // Code to undo the user's last action. } }
使用其中一個 setAction()
方法,將事件監聽器附加至 Snackbar
。請在呼叫 show()
之前附加事件監聽器,如以下程式碼範例所示:
Kotlin
val mySnackbar = Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.email_archived, Snackbar.LENGTH_SHORT) mySnackbar.setAction(R.string.undo_string, MyUndoListener()) mySnackbar.show()
Java
Snackbar mySnackbar = Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.email_archived, Snackbar.LENGTH_SHORT); mySnackbar.setAction(R.string.undo_string, new MyUndoListener()); mySnackbar.show();
SnackbarHost
,如以下範例所示:Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { DACPlaygroundTheme { val snackbarHostState = remember { SnackbarHostState() } val scope = rememberCoroutineScope() Scaffold( snackbarHost = { SnackbarHost(snackbarHostState) }, content = { padding -> Button( modifier = Modifier.padding(padding), onClick = { scope.launch { snackbarHostState.showSnackbar( message = "1 item removed", actionLabel = "UNDO", duration = SnackbarDuration.Short ).run { when (this) { Dismissed -> Log.d("SNACKBAR", "Dismissed") ActionPerformed -> Log.d("SNACKBAR", "UNDO CLICKED") } } } } ) { Text("Show snackbar") } } ) } } }