Cómo crear y mostrar un mensaje emergente

Prueba el estilo de Compose
Jetpack Compose es el kit de herramientas de IU recomendado para Android. Obtén información para agregar notificaciones en Compose.

Puedes usar una Snackbar para mostrar un mensaje breve al usuario. A diferencia de las notificaciones, el mensaje desaparece automáticamente después de un período breve. Un Snackbar es ideal para mensajes breves en los que no es necesario que el usuario realice ninguna acción. Por ejemplo, una app de correo electrónico puede usar un Snackbar para indicarle al usuario que la app envió un correo electrónico con éxito.

Cómo usar un objeto CoordinatorLayout

Un Snackbar se adjunta a una vista. Snackbar proporciona una funcionalidad básica si se adjunta a cualquier objeto derivado de la clase View, como cualquiera de los objetos de diseño comunes. Sin embargo, si el Snackbar está vinculado a un CoordinatorLayout, el Snackbar obtiene funciones adicionales:

  • El usuario puede descartar el elemento Snackbar deslizándolo hacia afuera.
  • El diseño mueve otros elementos de la IU cuando aparece Snackbar. Por ejemplo, si el diseño tiene un FloatingActionButton, el botón se mueve hacia arriba cuando muestra un Snackbar, en lugar de dibujar el Snackbar sobre el botón. En la figura 1, se muestra cómo se ve.

La clase CoordinatorLayout proporciona un superconjunto de la funcionalidad de FrameLayout. Si tu app ya usa un FrameLayout, puedes reemplazar ese diseño por un CoordinatorLayout para habilitar la funcionalidad completa de Snackbar. Si tu app usa otros objetos de diseño, une los elementos de diseño existentes en un CoordinatorLayout, como se muestra en el siguiente ejemplo:

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

Establece una etiqueta android:id para tu CoordinatorLayout. Cuando muestras el mensaje, necesitas el ID del diseño.

Figura 1: CoordinatorLayout mueve FloatingActionButton hacia arriba cuando aparece Snackbar.

Muestra un mensaje

Hay dos pasos para mostrar un mensaje. Primero, creas un objeto Snackbar con el texto del mensaje. Luego, llamas al método show() de ese objeto para mostrarle el mensaje al usuario.

Crea un objeto Snackbar

Llama al método estático Snackbar.make() para crear un objeto Snackbar. Cuando crees el Snackbar, especifica el mensaje que mostrará y la duración:

Kotlin

val mySnackbar = Snackbar.make(view, stringId, duration)

Java

Snackbar mySnackbar = Snackbar.make(view, stringId, duration);
vista
Es la vista a la que se adjunta el Snackbar. El método busca la jerarquía de vistas desde la vista pasada hasta que llega a un CoordinatorLayout o a la vista de contenido de la decoración de la ventana. Por lo general, es más sencillo pasar el CoordinatorLayout que contiene tu contenido.
stringId
Es el ID de recurso del mensaje que deseas mostrar. Puede ser texto con formato o sin formato.
de vistas
Es la cantidad de tiempo que se muestra el mensaje. Puede ser LENGTH_SHORT o LENGTH_LONG.

Cómo mostrar el mensaje al usuario

Después de crear el Snackbar, llama a su método show() para mostrarle Snackbar al usuario:

Kotlin

mySnackbar.show()

Java

mySnackbar.show();

El sistema no muestra varios objetos Snackbar al mismo tiempo, por lo que, si la vista muestra otro Snackbar, el sistema pone en cola tu Snackbar y lo muestra después de que la Snackbar actual venza o se descarte.

Si quieres mostrar un mensaje al usuario y no necesitas llamar a ninguno de los métodos de utilidad del objeto Snackbar, no necesitas mantener la referencia al Snackbar después de llamar a show(). Por este motivo, es común usar el encadenamiento de métodos para crear y mostrar un Snackbar en una declaración:

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();