您可以为 Snackbar
添加操作,以便用户回复您的消息。这样一来,Snackbar
会在消息文本旁边放置一个按钮,用户可以通过点按该按钮来触发您的操作。例如,电子邮件应用可能会在其“电子邮件已归档”消息上放置一个“撤消”按钮。如果用户点按撤消按钮,应用会从归档中撤回电子邮件。
![一张图片,显示了包含“撤消”操作按钮的动作条](https://developer.android.google.cn/static/images/ui/notifications/action_snackbar_undo.png?hl=sk)
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") } } ) } } }