Możesz użyć elementu Snackbar, aby wyświetlić użytkownikowi krótki komunikat. W przeciwieństwie do powiadomień wiadomość zniknie automatycznie po krótkim czasie. Snackbar jest idealny do krótkich wiadomości, na które użytkownik nie musi reagować. Na przykład aplikacja pocztowa może używać Snackbar, aby poinformować użytkownika o tym, że e-mail został wysłany.
Używanie CoordinatorLayout
Do widoku jest dołączony element multimedialny Snackbar. Element Snackbar zapewnia podstawowe funkcje, jeśli jest dołączony do dowolnego obiektu pochodnego od klasy View, np. do dowolnego z powszechnie używanych obiektów układu. Jeśli jednak Snackbar jest dołączony do CoordinatorLayout, Snackbar zyskuje dodatkowe funkcje:
- Użytkownik może zamknąć
Snackbar, przesuwając go w bok. - Układ przesuwa inne elementy interfejsu, gdy pojawia się
Snackbar. Jeśli na przykład układ zawiera elementFloatingActionButton, przesuwa on przycisk w górę, gdy wyświetla się elementSnackbar, zamiast rysować elementSnackbarna przycisku. Jak to wygląda, widać na rysunku 1.
Klasa CoordinatorLayout udostępnia superzbiór funkcji klasy FrameLayout.
Jeśli Twoja aplikacja korzysta już z poziomu FrameLayout, możesz zastąpić ten układ układem CoordinatorLayout, aby uzyskać pełną funkcjonalność Snackbar. Jeśli Twoja aplikacja używa innych obiektów układu, owiń istniejące elementy układu w element CoordinatorLayout, jak w tym przykładzie:
<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>
Ustaw tag android:id dla CoordinatorLayout.
Podczas wyświetlania wiadomości potrzebujesz identyfikatora układu.
Rysunek 1. CoordinatorLayout przesuwa FloatingActionButton w górę, gdy pojawia się Snackbar.
Wyświetlanie wiadomości
Wyświetlanie wiadomości składa się z 2 etapów. Najpierw utwórz obiekt Snackbar z tekstem wiadomości. Następnie wywołujesz metodę show() tego obiektu, aby wyświetlić wiadomość użytkownikowi.
Tworzenie obiektu Snackbar
Utwórz obiekt Snackbar, wywołując stałą metodę Snackbar.make(). Podczas tworzenia Snackbar określ wyświetlany komunikat i czas jego wyświetlania:
Kotlin
val mySnackbar = Snackbar.make(view, stringId, duration)
Java
Snackbar mySnackbar = Snackbar.make(view, stringId, duration);
- wyświetl
-
Widok, do którego chcesz dołączyć
Snackbar. Metoda przeszukuje hierarchię widoków od przekazanego widoku do momentu, aż dotrze do widoku treściCoordinatorLayoutlub okna dekoracji okna. Zwykle łatwiej jest przekazaćCoordinatorLayoutotaczający treści. - stringId
- Identyfikator zasobu wiadomości, którą chcesz wyświetlić. Może to być sformatowany lub niesformatowany tekst.
- czas trwania
- Czas wyświetlania wiadomości. Może to być
LENGTH_SHORTlubLENGTH_LONG.
Wyświetlanie wiadomości użytkownikowi
Po utworzeniu obiektu Snackbar wywołaj jego metodę show(), aby wyświetlić użytkownikowi obiekt Snackbar:
Kotlin
mySnackbar.show()
Java
mySnackbar.show();
System nie wyświetla jednocześnie wielu obiektów Snackbar, więc jeśli widok wyświetla obecnie inny obiekt Snackbar, system wstawia do kolejki obiekt Snackbar i wyświetla go po wygaśnięciu lub odrzuceniu bieżącego obiektu Snackbar.
Jeśli chcesz wyświetlić użytkownikowi wiadomość i nie musisz wywoływać żadnej z metod pomocniczych obiektu Snackbar, nie musisz zachowywać odwołania do obiektu Snackbar po wywołaniu metody show(). Z tego powodu często stosuje się łańcuch metod, aby utworzyć i wyświetlić obiekt Snackbar w jednym poleceniu:
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();