您可以使用 Snackbar
向用户显示简短消息。与通知不同,消息会在短时间后自动消失。Snackbar
非常适合显示用户无需采取行动的简短消息。例如,电子邮件应用可以使用 Snackbar
来告知用户应用已成功发送电子邮件。
使用 CoordinatorLayout
Snackbar
附加到视图。如果 Snackbar
附加到派生自 View
类的任何对象(例如任何常见的布局对象),它会提供基本功能。但是,如果 Snackbar
附加到 CoordinatorLayout
,则 Snackbar
会获得额外功能
- 用户可以通过滑动来关闭
Snackbar
。 Snackbar
显示时,布局会移动其他界面元素。例如,如果布局有FloatingActionButton
,则在显示Snackbar
时,布局会将按钮向上移动,而不是将Snackbar
绘制在按钮上方。您可以在图 1 中看到效果。
CoordinatorLayout
类提供了 FrameLayout
功能的超集。如果您的应用已经使用了 FrameLayout
,则可以用 CoordinatorLayout
替换该布局,以启用完整的 Snackbar
功能。如果您的应用使用其他布局对象,请将现有布局元素封装在 CoordinatorLayout
中,如下例所示
<android.support.design.widget.CoordinatorLayout android:id="@+id/myCoordinatorLayout" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- Here are the existing layout elements, now wrapped in a CoordinatorLayout. --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- ...Toolbar, other layouts, other elements... --> </LinearLayout> </android.support.design.widget.CoordinatorLayout>
为您的 CoordinatorLayout
设置一个 android:id
标签。显示消息时需要使用此布局的 ID。
图 1. Snackbar
显示时,CoordinatorLayout
将 FloatingActionButton
向上移动。
显示消息
显示消息有两个步骤。首先,使用消息文本创建一个 Snackbar
对象。然后,调用该对象的 show()
方法向用户显示消息。
创建 Snackbar 对象
通过调用静态方法 Snackbar.make()
来创建 Snackbar
对象。创建 Snackbar
时,指定要显示的消息以及消息显示时长
Kotlin
val mySnackbar = Snackbar.make(view, stringId, duration)
Java
Snackbar mySnackbar = Snackbar.make(view, stringId, duration);
- view
- 用于附加
Snackbar
的视图。该方法会从传入的视图向上搜索视图层次结构,直到找到CoordinatorLayout
或窗口装饰的 content view。通常,传入包含内容的CoordinatorLayout
会更简单。 - stringId
- 您要显示的消息的资源 ID。可以是格式化文本或未格式化文本。
- duration
- 消息显示时长。可以是
LENGTH_SHORT
或LENGTH_LONG
。
向用户显示消息
创建 Snackbar
后,调用其 show()
方法将 Snackbar
显示给用户
Kotlin
mySnackbar.show()
Java
mySnackbar.show();
系统不会同时显示多个 Snackbar
对象,因此如果视图当前正在显示另一个 Snackbar
,系统会排队等待您的 Snackbar
,并在当前 Snackbar
过期或关闭后显示它。
如果您想向用户显示消息,并且不需要调用 Snackbar
对象的任何实用方法,则在调用 show()
后无需保留对 Snackbar
的引用。因此,通常使用方法链在一个语句中创建并显示 Snackbar
Kotlin
Snackbar.make( findViewById(R.id.myCoordinatorLayout), R.string.email_sent, Snackbar.LENGTH_SHORT ).show()
Java
Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.email_sent, Snackbar.LENGTH_SHORT) .show();