Za pomocą
Snackbar
do
wyświetlić użytkownikowi krótką wiadomość. Nie podoba mi się
Powiadomienia,
wiadomość jest automatycznie usuwana po krótkim czasie. Obecny stan „Snackbar
”:
ta funkcja sprawdza się w przypadku krótkich wiadomości, na które użytkownik nie musi wykonywać żadnych działań. Na przykład
aplikacja do poczty e-mail może użyć parametru Snackbar
, aby poinformować użytkownika, że
Użytkownik wysłał wiadomość e-mail.
Użyj układu koordynatora
Element Snackbar
jest dołączony do widoku. Snackbar
zapewnia podstawową funkcjonalność, o ile jest połączona z dowolnym obiektem wyodrębnionym na podstawie
View
, taką jak
z typowych obiektów układu. Jeśli jednak Snackbar
to
dołączany do
CoordinatorLayout
,
Snackbar
zyskuje dodatkowe funkcje:
- Użytkownik może zamknąć pole
Snackbar
, przesuwając ją. - Po wyświetleniu elementu
Snackbar
inne elementy interfejsu zostaną przeniesione. Jeśli na przykład układ ma atrybutyFloatingActionButton
, układ przesuwa przycisk w górę, gdy wyświetla sięSnackbar
, rysunkuSnackbar
na przycisku. Jak widać, Widać to na rysunku 1.
Klasa CoordinatorLayout
udostępnia element nadrzędny:
funkcji
FrameLayout
Jeśli Twoja aplikacja korzysta już z interfejsu FrameLayout
, możesz zastąpić ten układ
z parametrem CoordinatorLayout
, aby włączyć pełne możliwości Snackbar
funkcji. Jeśli aplikacja używa innych obiektów układu, opakuj istniejący układ
CoordinatorLayout
, jak na przykładzie poniżej
przykład:
<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 musisz mieć identyfikator szablonu.
Rysunek 1. CoordinatorLayout
przesuwa
FloatingActionButton
w górę, gdy pojawi się ikona Snackbar
.
Wyświetl wiadomość
Aby wyświetlić wiadomość, musisz wykonać 2 czynności. Najpierw tworzysz
Snackbar
obiekt z tekstem wiadomości. Następnie wywołujesz ten obiekt
show()
.
Tworzenie obiektu Snackbar
Utwórz obiekt Snackbar
, wywołując statyczny
Snackbar.make()
. Podczas tworzenia Snackbar
określ wiadomość
oraz czas wyświetlania wiadomości:
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ć element
Snackbar
. Metoda przeszukuje wyświetlania hierarchii z przekazywanego widoku aż do osiągnięciaCoordinatorLayout
lub widok treści dekoracji okna. Zwykle prościej jest przesłaćCoordinatorLayout
które otacza treść. - Identyfikator ciągu
- Identyfikator zasobu wiadomości, którą chcesz wyświetlić. Możesz go sformatować lub niesformatowany tekst.
- czas trwania
-
Czas wyświetlania wiadomości. Może to być
LENGTH_SHORT
lubLENGTH_LONG
Pokaż wiadomość użytkownikowi
Po utworzeniu Snackbar
nadaj mu nazwę show()
aby wyświetlić Snackbar
użytkownikowi:
Kotlin
mySnackbar.show()
Java
mySnackbar.show();
System nie wyświetla jednocześnie wielu obiektów Snackbar
więc jeśli w widoku jest obecnie wyświetlany inny Snackbar
, parametr
system umieści Snackbar
w kolejce i wyświetli go po zakończeniu bieżącego
Aplikacja Snackbar
wygasa lub została odrzucona.
Jeśli chcesz wyświetlić wiadomość użytkownikowi i nie musisz wywoływać żadnego
Snackbar
, nie musisz przechowywać
odniesienia do Snackbar
po wywołaniu show()
. Dla:
dlatego często używa się łańcuchów metod do tworzenia i wyświetlania
Snackbar
w jednym wyciągu:
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();