Możesz użyć elementu Snackbar, aby wyświetlić użytkownikowi krótki komunikat. W przeciwieństwie do powiadomień komunikat automatycznie znika po krótkim czasie. Snackbar jest idealny w przypadku krótkich wiadomości, na które użytkownik nie musi odpowiadać. Na przykład aplikacja do poczty e-mail może używać Snackbar, aby poinformować użytkownika, że wysłała e-maila.
Używanie elementu CoordinatorLayout
Rola Snackbar jest powiązana z widokiem. Snackbar
zapewnia podstawową funkcjonalność, jeśli jest dołączony do dowolnego obiektu pochodzącego z klasyView, np. do dowolnego z popularnych obiektów układu. Jeśli jednak Snackbar jest dołączony do CoordinatorLayout, zyskuje dodatkowe funkcje:Snackbar
- Użytkownik może odrzucić
Snackbar, przesuwając palcem. - Gdy pojawi się ikona
Snackbar, układ przesunie inne elementy interfejsu. Jeśli na przykład układ ma znakFloatingActionButton, układ przesuwa przycisk w górę, gdy wyświetla znakSnackbar, zamiast rysować go na przycisku.SnackbarNa rysunku 1 widać, jak to wygląda.
Klasa CoordinatorLayout zapewnia nadzbiór funkcji klasy FrameLayout.
Jeśli Twoja aplikacja korzysta już z FrameLayout, możesz zastąpić ten układ układem CoordinatorLayout, aby włączyć pełną funkcjonalność Snackbar. Jeśli Twoja aplikacja używa innych obiektów układu, umieść istniejące elementy układu w CoordinatorLayout, jak pokazano 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 urządzenia CoordinatorLayout.
Identyfikator układu jest potrzebny podczas wyświetlania wiadomości.
Rysunek 1. CoordinatorLayout przesuwa FloatingActionButton w górę, gdy pojawi 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ć komunikat użytkownikowi.
Tworzenie obiektu Snackbar
Utwórz obiekt Snackbar, wywołując statyczną metodę Snackbar.make(). Podczas tworzenia Snackbar określ wyświetlaną wiadomość i czas jej wyświetlania:
Kotlin
val mySnackbar = Snackbar.make(view, stringId, duration)
Java
Snackbar mySnackbar = Snackbar.make(view, stringId, duration);
- wyświetl
-
Widok, do którego ma być dołączony element
Snackbar. Metoda przeszukuje hierarchię widoków od przekazanego widoku, aż dotrze doCoordinatorLayoutlub widoku treści dekoracji okna. Zwykle łatwiej jest przekazać elementCoordinatorLayoutzawierający treść. - stringId
- Identyfikator zasobu wiadomości, którą chcesz wyświetlić. Może to być tekst sformatowany lub niesformatowany.
- czas trwania
-
Czas wyświetlania wiadomości. Może to być:
LENGTH_SHORTlubLENGTH_LONG.
Wyświetlanie komunikatu 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 wielu obiektów Snackbar jednocześnie, więc jeśli w widoku jest obecnie wyświetlany inny obiekt Snackbar, system umieszcza Twój obiekt Snackbar w kolejce i wyświetla go po wygaśnięciu lub zamknięciu bieżącego obiektu Snackbar.
Jeśli chcesz wyświetlić użytkownikowi wiadomość i nie musisz wywoływać żadnych metod narzędziowych obiektu Snackbar, nie musisz zachowywać odwołania do Snackbar po wywołaniu show(). Z tego powodu często używa się łańcucha metod do utworzenia i wyświetlenia obiektu Snackbar w jednej instrukcji:
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();