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

Compose をお試しください
Jetpack Compose は、Android で推奨される UI ツールキットです。Compose で通知を追加する方法について学習します。

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

CoordinatorLayout を使用する

Snackbar はビューにアタッチされます。Snackbar は、View クラスから派生したオブジェクト(一般的なレイアウト オブジェクトなど)にアタッチされている場合、基本的な機能を提供します。ただし、Snackbar が CoordinatorLayout に関連付けられている場合、Snackbar には追加機能が備わります。

  • ユーザーは Snackbar をスワイプして閉じることができます。
  • Snackbar が表示されると、レイアウトは他の UI 要素を移動します。たとえば、レイアウトに FloatingActionButton がある場合、レイアウトは Snackbar をボタンの上に描画するのではなく、Snackbar を表示するときにボタンを上に移動します。図 1 にその様子を示します。

CoordinatorLayout クラスは、FrameLayout の機能のスーパーセットを提供します。アプリですでに FrameLayout を使用している場合は、そのレイアウトを CoordinatorLayout に置き換えて、Snackbar の全機能を有効にできます。アプリで他のレイアウト オブジェクトを使用している場合は、次の例に示すように、既存のレイアウト要素を CoordinatorLayout でラップします。

<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myCoordinatorLayout"
    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>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

CoordinatorLayout の android:id タグを設定します。メッセージを表示するときに、レイアウトの ID が必要になります。

図 1. Snackbar が表示されると、CoordinatorLayout は FloatingActionButton を上に移動します。

メッセージを表示する

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

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

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

val mySnackbar = Snackbar.make(view, stringId, duration)
view
Snackbar をアタッチするビュー。このメソッドは、渡されたビューからビュー階層を検索し、CoordinatorLayout またはウィンドウ装飾のコンテンツ ビューに到達するまで検索します。通常は、コンテンツを囲む CoordinatorLayout を渡す方が簡単です。
stringId
表示するメッセージのリソース ID。これは、書式設定されたテキストまたは書式設定されていないテキストです。
duration
メッセージを表示する時間。LENGTH_SHORT または LENGTH_LONG のいずれかです。

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

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

mySnackbar.show()

システムは複数の Snackbar オブジェクトを同時に表示しないため、ビューに別の Snackbar が現在表示されている場合、システムは Snackbar をキューに登録し、現在の Snackbar が期限切れになるか閉じられた後に表示します。

ユーザーにメッセージを表示したいが、Snackbar オブジェクトのユーティリティ メソッドを呼び出す必要がない場合は、show() を呼び出した後に Snackbar への参照を保持する必要はありません。そのため、メソッド チェーンを使用して 1 つのステートメントで Snackbar を作成して表示するのが一般的です。

Snackbar.make(
    findViewById(R.id.myCoordinatorLayout),
    R.string.email_sent,
    Snackbar.LENGTH_SHORT
).show()