Creare e visualizzare un messaggio popup

Prova Compose
Jetpack Compose è il toolkit per la UI consigliato per Android. Scopri come aggiungere notifiche in Scrivi.

Puoi utilizzare un Snackbar per mostrare un breve messaggio all'utente. A differenza delle notifiche, il messaggio scompare automaticamente dopo un breve periodo. Un Snackbar è ideale per i messaggi brevi su cui l'utente non deve intervenire. Ad esempio, un'app email può utilizzare un Snackbar per comunicare all'utente che l'app ha inviato correttamente un'email.

Utilizzare un CoordinatorLayout

Un Snackbar è collegato a una visualizzazione. Snackbar fornisce funzionalità di base se è collegato a un oggetto derivato dalla classe View, ad esempio uno qualsiasi degli oggetti di layout comuni. Tuttavia, se il Snackbar è collegato a un CoordinatorLayout, il Snackbar acquisisce funzionalità aggiuntive:

  • L'utente può chiudere Snackbar scorrendo.
  • Il layout sposta altri elementi UI quando viene visualizzato Snackbar. Ad esempio, se il layout ha un FloatingActionButton, il layout sposta il pulsante verso l'alto quando mostra un Snackbar, invece di disegnare il Snackbar sopra il pulsante. Puoi vedere l'aspetto nella Figura 1.

La classe CoordinatorLayout fornisce un superset delle funzionalità di FrameLayout. Se la tua app utilizza già un FrameLayout, puoi sostituire questo layout con un CoordinatorLayout per abilitare la funzionalità completa di Snackbar. Se la tua app utilizza altri oggetti di layout, racchiudi gli elementi di layout esistenti in un CoordinatorLayout, come mostrato nel seguente esempio:

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

Imposta un tag android:id per il tuo CoordinatorLayout. Hai bisogno dell'ID del layout quando visualizzi il messaggio.

Figura 1. Il CoordinatorLayout sposta il FloatingActionButton verso l'alto quando viene visualizzato il Snackbar.

Visualizzare un messaggio

Per visualizzare un messaggio sono necessari due passaggi. Per prima cosa, crea un oggetto Snackbar con il testo del messaggio. Quindi, chiama il metodo show() dell'oggetto per mostrare il messaggio all'utente.

Crea un oggetto Snackbar

Crea un oggetto Snackbar chiamando il metodo statico Snackbar.make(). Quando crei Snackbar, specifica il messaggio che visualizza e la durata di visualizzazione del messaggio:

val mySnackbar = Snackbar.make(view, stringId, duration)
visualizza
La visualizzazione a cui allegare il Snackbar. Il metodo esegue la ricerca nella gerarchia di oggetti View dalla visualizzazione passata fino a raggiungere un CoordinatorLayout o la visualizzazione dei contenuti della decorazione della finestra. In genere, è più semplice superare il CoordinatorLayout che racchiude i tuoi contenuti.
stringId
L'ID risorsa del messaggio che vuoi visualizzare. Può essere testo formattato o non formattato.
durata
Il periodo di tempo durante il quale mostrare il messaggio. Può essere LENGTH_SHORT o LENGTH_LONG.

Mostra il messaggio all'utente

Dopo aver creato Snackbar, chiama il relativo metodo show() per mostrare Snackbar all'utente:

mySnackbar.show()

Il sistema non mostra più oggetti Snackbar contemporaneamente, quindi se la visualizzazione mostra attualmente un altro Snackbar, il sistema mette in coda il tuo Snackbar e lo mostra dopo la scadenza o la chiusura dell'Snackbar corrente.

Se vuoi mostrare un messaggio all'utente e non devi chiamare nessuno dei metodi di utilità dell'oggetto Snackbar, non devi conservare il riferimento a Snackbar dopo aver chiamato show(). Per questo motivo, è comune utilizzare l'incatenamento dei metodi per creare e mostrare un Snackbar in un'unica istruzione:

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