ポップアップ メッセージを作成して表示する

Compose を試す
Jetpack Compose は Android の推奨 UI ツールキットです。Compose で通知を追加する方法を学習します。

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

CoordinatorLayout を使用する

Snackbar はビューにアタッチされます。Snackbar は、一般的なレイアウト オブジェクトなど、View クラスから派生したオブジェクトに接続されていれば、基本的な機能を提供します。ただし、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. CoordinatorLayout は、Snackbar が表示されたときに FloatingActionButton を上に移動します。

メッセージを表示する

メッセージを表示するには、2 つのステップがあります。まず、メッセージ テキストを含む Snackbar オブジェクトを作成します。次に、そのオブジェクトの show() メソッドを呼び出して、ユーザーにメッセージを表示します。

Snackbar オブジェクトを作成する

静的 Snackbar.make() メソッドを呼び出して、Snackbar オブジェクトを作成します。Snackbar を作成するときに、表示するメッセージとメッセージの表示時間を指定します。

Kotlin

val mySnackbar = Snackbar.make(view, stringId, duration)

Java

Snackbar mySnackbar = Snackbar.make(view, stringId, duration);
ビュー
Snackbar を接続するビュー。このメソッドは、渡されたビューから CoordinatorLayout またはウィンドウ デコレーションのコンテンツ ビューに達するまで、ビュー階層を検索します。通常は、コンテンツを囲む CoordinatorLayout を渡す方が簡単です。
stringId
表示するメッセージのリソース ID。書式付きテキストでも書式なしテキストでもかまいません。
時間
メッセージを表示する時間の長さ。LENGTH_SHORT または LENGTH_LONG のいずれかを指定できます。

メッセージをユーザーに表示する

Snackbar を作成したら、その show() メソッドを呼び出して、ユーザーに Snackbar を表示します。

Kotlin

mySnackbar.show()

Java

mySnackbar.show();

複数の Snackbar オブジェクトが同時に表示されることはないため、ビューに別の 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();