Snackbar を使用すると、ユーザーに短いメッセージを表示できます。通知とは異なり、メッセージはしばらくすると自動的に消えます。Snackbar は、ユーザーが対処する必要がない短いメッセージに最適です。たとえば、メールアプリで Snackbar を使用して、ユーザーにメールが送信されたことを通知できます。
CoordinatorLayout を使用する
Snackbar はビューにアタッチされます。Snackbar が View クラスから派生した任意のオブジェクト(一般的なレイアウト オブジェクトなど)にアタッチされている場合、基本的な機能を提供します。ただし、Snackbar が CoordinatorLayout にアタッチされている場合、Snackbar で次の追加機能が使えるようになります。
Snackbarをスワイプして消すことができる。Snackbarが表示されると、レイアウトによって他の UI 要素が移動される。たとえば、レイアウトに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 が上に移動する。
メッセージを表示する
メッセージを表示するには、2 つのステップがあります。まず、メッセージ テキストを含む Snackbar オブジェクトを作成します。次に、そのオブジェクトの show() メソッドを呼び出して、ユーザーにメッセージを表示します。
Snackbar オブジェクトを作成する
Snackbar オブジェクトを作成するには、静的な Snackbar.make() メソッドを呼び出します。Snackbar を作成するときに、表示するメッセージと、メッセージの表示時間を指定します。
Kotlin
val mySnackbar = Snackbar.make(view, stringId, duration)
Java
Snackbar mySnackbar = Snackbar.make(view, stringId, duration);
- 表示
Snackbarをアタッチするビュー。このメソッドは、渡されたビューからCoordinatorLayoutまたはウィンドウ装飾のコンテンツ ビューに達するまで、ビュー階層を検索します。通常、コンテンツを内包したCoordinatorLayoutを渡すだけの方法が最も簡単です。- stringId
- 表示するメッセージのリソース ID。書式付きまたは書式なしのテキストを指定できます。
- duration
- メッセージの表示時間の長さ。値は
LENGTH_SHORTまたはLENGTH_LONGです。
ユーザーにメッセージを表示する
Snackbar を作成したら、show() メソッドを呼び出してユーザーに Snackbar を表示します。
Kotlin
mySnackbar.show()
Java
mySnackbar.show();
複数の Snackbar オブジェクトは同時に表示されません。現在、ビューで 1 つの Snackbar が表示されている場合、別の Snackbar はキューに入り、現在の Snackbar が期限切れになるか、終了した後に表示されます。
ユーザーにメッセージを表示する場合で、Snackbar オブジェクトのユーティリティ メソッドを呼び出す必要がなければ、show() を呼び出した後に Snackbar への参照を保持する必要はありません。そのため、1 つのステートメントで 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();