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()