Puedes usar un Snackbar
para mostrarle un mensaje breve al usuario. A diferencia de las notificaciones, el mensaje desaparece automáticamente después de un período corto. Un Snackbar
es ideal para mensajes breves en los que el usuario no necesita realizar acciones. Por ejemplo, una app de correo electrónico puede usar un Snackbar
para indicarle al usuario que la app envió correctamente un correo electrónico.
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 Snackbar
está vinculado a un CoordinatorLayout
, Snackbar
obtiene funciones adicionales:
- El usuario puede descartar la
Snackbar
deslizándola hacia afuera. - El diseño mueve otros elementos de la IU cuando aparece
Snackbar
. Por ejemplo, si el diseño tiene unFloatingActionButton
, mueve el botón hacia arriba cuando muestra unSnackbar
, en lugar de dibujar elSnackbar
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 una 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
.
Necesitas el ID del diseño cuando muestras el mensaje.
Muestra un mensaje
Hay dos pasos para mostrar un mensaje. Primero, crea 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
Crea un objeto Snackbar
mediante una llamada al método estático Snackbar.make()
. Cuando crees el Snackbar
, especifica el mensaje que se muestra y la cantidad de tiempo que aparece:
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 alcanza unCoordinatorLayout
o la vista de contenido de la decoración de la ventana. Por lo general, es más fácil pasar elCoordinatorLayout
que incluye 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
oLENGTH_LONG
.
Muestra el mensaje al usuario
Después de crear el Snackbar
, llama a su método show()
para mostrarle el 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 el Snackbar
actual caduque o se descarte.
Si deseas mostrar un mensaje al usuario y no necesitas llamar a ninguno de los métodos de utilidad del objeto Snackbar
, no necesitas conservar 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 sentencia:
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();