You can use a
Snackbar
to
display a brief message to the user. Unlike
Notifications, the
message automatically goes away after a short period. A Snackbar
is
ideal for brief messages that the user doesn't need to act on. For example, an
email app can use a Snackbar
to tell the user that the app
successfully sent an email.
Use a CoordinatorLayout
A Snackbar
is attached to a view. The Snackbar
provides basic functionality if it is attached to any object derived from the
View
class, such as
any of the common layout objects. However, if the Snackbar
is
attached to a
CoordinatorLayout
,
the Snackbar
gains additional features:
- The user can dismiss the
Snackbar
by swiping it away. - The layout moves other UI elements when the
Snackbar
appears. For example, if the layout has aFloatingActionButton
, the layout moves the button up when it shows aSnackbar
, instead of drawing theSnackbar
on top of the button. You can see how this looks in figure 1.
The CoordinatorLayout
class provides a superset of the
functionality of
FrameLayout
.
If your app already uses a FrameLayout
, you can replace that layout
with a CoordinatorLayout
to enable the full Snackbar
functionality. If your app uses other layout objects, wrap your existing layout
elements in a CoordinatorLayout
, as shown in the following
example:
<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>
Set an android:id
tag for your CoordinatorLayout
.
You need the layout's ID when you display the message.
Display a message
There are two steps to displaying a message. First, you create a
Snackbar
object with the message text. Then, you call that object's
show()
method to display the message to the user.
Create a Snackbar object
Create a Snackbar
object by calling the static
Snackbar.make()
method. When you create the Snackbar
, specify the message it
displays and the length of time to show the message:
Kotlin
val mySnackbar = Snackbar.make(view, stringId, duration)
Java
Snackbar mySnackbar = Snackbar.make(view, stringId, duration);
- view
-
The view to attach the
Snackbar
to. The method searches up the view hierarchy from the passed view until it reaches aCoordinatorLayout
or the window decor's content view. Ordinarily, it's simpler to pass theCoordinatorLayout
enclosing your content. - stringId
- The resource ID of the message you want to display. This can be formatted or unformatted text.
- duration
-
The length of time to show the message. This can be
LENGTH_SHORT
orLENGTH_LONG
.
Show the message to the user
After you create the Snackbar
, call its show()
method to display the Snackbar
to the user:
Kotlin
mySnackbar.show()
Java
mySnackbar.show();
The system doesn't show multiple Snackbar
objects at the same
time, so if the view is currently displaying another Snackbar
, the
system queues your Snackbar
and displays it after the current
Snackbar
expires or is dismissed.
If you want to show a message to the user and don't need to call any of the
Snackbar
object's utility methods, you don't need to keep the
reference to the Snackbar
after you call show()
. For
this reason, it's common to use method chaining to create and show a
Snackbar
in one statement:
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();