ポップアップ メッセージの作成と表示

Snackbar を使用すると、ユーザーに短いメッセージを表示できます。メッセージは、しばらくすると自動的に消えます。Snackbar は、ユーザーが必ずしも対処する必要がない短いメッセージに最適です。たとえば、メールアプリで Snackbar を使用して、ユーザーにメールが送信されたことを通知できます。

CoordinatorLayout を使用する

Snackbar はビューにアタッチされます。SnackbarView クラスから派生した任意のオブジェクト(一般的なレイアウト オブジェクトなど)にアタッチされている場合、基本的な機能を提供します。ただし、SnackbarCoordinatorLayout にアタッチされている場合、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>

CoordinatorLayoutandroid: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);
    
view
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();