Tworzenie i wyświetlanie wyskakującej wiadomości

Wypróbuj metodę Compose
Jetpack Compose to zalecany zestaw narzędzi interfejsu na Androida. Dowiedz się, jak dodawać powiadomienia w Compose.

Możesz użyć elementu Snackbar, aby wyświetlić użytkownikowi krótki komunikat. W przeciwieństwie do powiadomień komunikat znika automatycznie po krótkim czasie. Snackbar to idealne rozwiązanie w przypadku krótkich wiadomości, które nie wymagają od użytkownika żadnych działań. 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. Klasa Snackbar zapewnia podstawowe funkcje, jeśli jest dołączona do dowolnego obiektu pochodzącego z klasy View, np. do dowolnego z typowych obiektów układu. Jeśli jednak Snackbar jest dołączony do CoordinatorLayout, Snackbar zyskuje dodatkowe funkcje:

  • Użytkownik może odrzucić Snackbar, przesuwając palcem.
  • Gdy pojawi się element Snackbar, układ przesunie inne elementy interfejsu. Jeśli na przykład układ zawiera element FloatingActionButton, to po wyświetleniu elementu Snackbar układ przesuwa przycisk w górę, zamiast rysować element Snackbar na przycisku. Na rysunku 1 możesz zobaczyć, 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 elementem CoordinatorLayout, aby włączyć pełną funkcjonalność Snackbar. Jeśli aplikacja używa innych obiektów układu, umieść istniejące elementy układu w CoordinatorLayout, jak pokazano w tym przykładzie:

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

Ustaw tag android:id dla urządzenia CoordinatorLayout. Identyfikator układu jest potrzebny podczas wyświetlania wiadomości.

Rysunek 1. Gdy pojawi się ikona Snackbar, ikona CoordinatorLayout przesunie FloatingActionButton w górę.

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świetlany komunikat i czas jego wyświetlania:

val 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 do CoordinatorLayout lub widoku treści dekoracji okna. Zwykle łatwiej jest przekazać CoordinatorLayout zawierają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_SHORT lubLENGTH_LONG.

Wyświetlanie komunikatu użytkownikowi

Po utworzeniu obiektu Snackbar wywołaj jego metodę show(), aby wyświetlić Snackbar użytkownikowi:

mySnackbar.show()

System nie wyświetla jednocześnie wielu obiektów Snackbar, 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 komunikat 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 elementu Snackbar w jednej instrukcji:

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