It's happening now, watch the livestream.

Descripción general de los avisos

Un aviso proporciona información simple sobre una acción en una pequeña ventana emergente. Solo ocupa la cantidad de espacio necesario para el mensaje, y la actividad en curso permanece visible y admite la interacción. Los avisos desaparecen automáticamente después de un tiempo.

Por ejemplo, al hacer clic en Enviar en un correo electrónico, se activa el aviso "Enviando mensaje...", como se muestra en la siguiente captura de pantalla:

Si se requiere la respuesta del usuario a un mensaje de estado, probablemente sea mejor usar una notificación.

Conceptos básicos

Primero, crea una instancia de un objeto Toast con uno de los métodos makeText(). Este método toma tres parámetros: el valor Context de la app, el mensaje de texto y la duración del aviso. Devuelve un objeto de aviso correctamente inicializado. Puedes mostrar el aviso con show(), tal se ve en el siguiente ejemplo:

Kotlin

    val text = "Hello toast!"
    val duration = Toast.LENGTH_SHORT

    val toast = Toast.makeText(applicationContext, text, duration)
    toast.show()
    

Java

    Context context = getApplicationContext();
    CharSequence text = "Hello toast!";
    int duration = Toast.LENGTH_SHORT;

    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
    

Este ejemplo muestra todos los elementos necesarios para la mayoría de los avisos. En general, no se necesita nada más. Sin embargo, puede ser necesario colocar el aviso colocar en otro lugar o incluso usar tu propio diseño en lugar de un mensaje de texto simple. En las siguientes secciones se describe cómo hacer estas adaptaciones.

También puedes encadenar métodos para evitar la dependencia del objeto de aviso, de la siguiente forma:

Kotlin

    Toast.makeText(context, text, duration).show()
    

Java

    Toast.makeText(context, text, duration).show();
    

Ubicación del aviso

Una notificación de aviso estándar aparece cerca de la parte inferior de la pantalla, centrada horizontalmente. Puedes cambiar esta ubicación con el método setGravity(int, int, int). Este método acepta tres parámetros: una constante Gravity, un eje de desplazamiento x y un eje de desplazamiento y.

Por ejemplo, si decides que el aviso debe aparecer en la esquina superior izquierda, puedes establecer la constante de gravedad de esta manera:

Kotlin

    toast.setGravity(Gravity.TOP or Gravity.LEFT, 0, 0)
    

Java

    toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
    

Si deseas desplazar el aviso hacia la derecha, aumenta el valor del segundo parámetro. Para desplazarlo hacia abajo, aumenta el valor del último parámetro.

Creación de una vista de aviso personalizada

Si un mensaje de texto simple no es suficiente, puedes crear un diseño personalizado para el aviso. Para crear un diseño personalizado, define un diseño View, en XML o en el código de la app, y pasa el objeto View raíz al método setView(View).

El siguiente fragmento de código contiene un diseño personalizado para un aviso (guardado como layout/custom_toast.xml):

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:id="@+id/custom_toast_container"
                  android:orientation="horizontal"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:padding="8dp"
                  android:background="#DAAA"
                  >
        <ImageView android:src="@drawable/droid"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginRight="8dp"
                   />
        <TextView android:id="@+id/text"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:textColor="#FFF"
                  />
    </LinearLayout>
    

Observa que el ID del elemento LinearLayout es "custom_toast_container". Debes usar este ID y el ID del archivo de diseño XML "custom_toast" para modificar el diseño, como se muestra aquí:

Kotlin

    val inflater = layoutInflater
    val container: ViewGroup = findViewById(R.id.custom_toast_container)
    val layout: ViewGroup = inflater.inflate(R.layout.custom_toast, container)
    val text: TextView = layout.findViewById(R.id.text)
    text.text = "This is a custom toast"
    with (Toast(applicationContext)) {
        setGravity(Gravity.CENTER_VERTICAL, 0, 0)
        duration = Toast.LENGTH_LONG
        view = layout
        show()
    }
    

Java

    LayoutInflater inflater = getLayoutInflater();
    View layout = inflater.inflate(R.layout.custom_toast,
                    (ViewGroup) findViewById(R.id.custom_toast_container));

    TextView text = (TextView) layout.findViewById(R.id.text);
    text.setText("This is a custom toast");

    Toast toast = new Toast(getApplicationContext());
    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
    toast.setDuration(Toast.LENGTH_LONG);
    toast.setView(layout);
    toast.show();
    

Primero, recupera LayoutInflater con getLayoutInflater() (o getSystemService()) y, luego, modifica el diseño desde XML con inflate(int, ViewGroup). El primer parámetro es el ID del recurso de diseño, y el segundo es el elemento View raíz. Este diseño modificado permite encontrar más objetos View en el diseño, así que ahora puedes capturar y definir el contenido de los elementos ImageView y TextView. Finalmente, crea un nuevo aviso con Toast(Context) y establece algunas propiedades, como la gravedad y la duración. A continuación, llama a setView(View) y transmite el diseño inflado. Ahora puedes mostrar el aviso con el diseño personalizado llamando a show().

Nota: No uses el constructor público para un aviso a menos que vayas a definir el diseño con setView(View). Si no tienes un diseño personalizado, debes usar makeText(Context, int, int) para crear el aviso.