Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

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, si se hace clic en la opción Enviar de un correo electrónico, se activará 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 usa tres parámetros: el objeto Context de la aplicación, el mensaje de texto y la duración del aviso. Muestra un objeto de aviso correctamente inicializado. Puedes mostrar la notificación del aviso con show(), tal como se muestra 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 posición con el método setGravity(int, int, int). Así se aceptan tres parámetros: una constante Gravity, un desplazamiento de la posición X y un desplazamiento de la posición 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 de View, en el archivo XML o en el código de tu aplicación. Luego, pasa el objeto View raíz al método setView(View).

El siguiente fragmento contiene un diseño personalizado de una notificación de 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 el objeto LayoutInflater con getLayoutInflater() (o getSystemService()) y, luego, infla el diseño desde XML usando 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. Por último, crea un nuevo objeto Toast con Toast(Context) y define algunas propiedades del aviso, como la gravedad y la duración. A continuación, llama a setView(View) y pásale el diseño inflado. Ahora puedes mostrar el aviso con tu diseño personalizado si llamas a show().

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