Toast En Android

El Toast En Android es un objeto de vista que se despliega como un elemento emergente en la interfaz del usuario, con el fin de mostrar un mensaje relacionado hacia alguna interacción realizada por el usuario.

Visual de Toast En Android

Su aparición es momentánea, ya que se desvanece luego de un corto periodo de tiempo establecido en su creación. Si deseas proyectar mensajes que se mantengan e incluso reciban acciones del usuario, usa una Snackbar (por escribir).

En este tutorial usaremos la siguiente App para comprobar las distintas configuraciones sobre la clase Toast.

Ejemplo de Toast En Android

Puedes descargar el código completo desde el siguiente botón:

Crear Y Mostrar Un Toast En Android

Supón que deseas darle la seguridad a tus usuarios cada que cambian un ajuste de su cuenta mediante el siguiente mensaje:

Ejemplo de Toast mostrando "Ajustes guardados"

Para implementarlo, solo debes crear una instancia de Toast con el método de clase makeText() y luego mostrarla en pantalla con el método show():

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val toast = Toast.makeText(this, "Ajustes guardados", Toast.LENGTH_LONG)
    toast.show()
}

Donde los argumentos usados en la creación, cumplen los siguientes roles:

  • context: Representa el contexto al que se someterá la esperanza de vida del Toast (normalmente es la actividad).
  • resId ó text: Es el mensaje a desplegar en el Toast. makeText() tiene una versión para pasar un recurso string (resId) o una secuencia de texto (text).
  • duration: Lo que dura el mensaje en pantalla. Usa las constantes LENGTH_SHORT y LENGTH_LONG para corta (2.5s) y larga duración (3s).

La clase Toast tiene propiedades como el texto, duración, gravedad y sus distancias en ejes. También es posible registrar un observador sobre el momento de su aparición.

Así que veamos como modificar algunas de ellas a través del ejemplo propuesto.

Texto

En nuestro ejemplo tomamos la entrada de un EditText, construimos un Toast y lo mostramos con el texto.

Texto de EditText en Toast

Esto se logra modificando el texto que mostrará el Toast a través de la propiedad text o el método setText():

private fun createAndShowToast() {
    val text = getToastText()

    val toast = Toast(this).apply {
        setText(text)
    }

    toast.show()
}

private fun getToastText(): String {
    val textField: TextInputLayout = findViewById(R.id.toast_text)

    return textField.editText?.text.toString()
}

En el código anterior se obtiene el valor del campo de texto y se almacena en text. Luego se usa el constructor público de Toast para crear la instancia que será configurada a partir del formulario.

A través de la función de alcance apply() podemos usar setText() con el valor de la variable del texto y luego mostrar el componente en la pantalla.

Duración

Para ilustrar el cambio entre las constantes de duración, se usaron dos RadioButtons que asignen el valor.

RadioButton en Toast

En este caso dispones la propiedad duration o el método setDuration() para asignar una de las dos constantes:

private fun createAndShowToast() {
    val duration = getToastDuration()

    val toast = Toast(this).apply {        
        setDuration(duration)
    }

    toast.show()
}

private fun getToastDuration(): Int {
    val radioGroup: RadioGroup = findViewById(R.id.toast_duration)

    return if (radioGroup.checkedRadioButtonId == R.id.long_duration)
        Toast.LENGTH_LONG
    else
        Toast.LENGTH_SHORT
}

El método getToastDuration() asigna LENGTH_LONG si el ID del radio seleccionado actualmente es R.id.long_duration. De lo contrario será LENGTH_SHORT.

Observar Eventos

En la API de nivel 30 se agregó la capacidad de observar la aparición y desaparición del Toast a través de la clase Toast.Callback. En la siguiente imagen vemos como se cuentan los toast que aparecen usando esta característica:

addCallback() en Toast

Usa los métodos addCallback() para añadir un observador y removeCallback() para eliminarlo.

private fun createAndShowToast() {
    val callback = createCallback()

    val toast = Toast(this).apply {        
        if (isAndroidR())
            addCallback(callback)
    }

    toast.show()
}

private fun isAndroidR(): Boolean {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
}

private fun createCallback() = @RequiresApi(Build.VERSION_CODES.R)
object : Toast.Callback() {
    override fun onToastShown() {
        counter++
        updateCounterText()
    }
}

Evidentemente, es necesario comprobar si la versión actual es igual o mayor a Android R, por lo que usamos a isAndroidR() para comprobarlo.

Luego creamos una expresión de objeto con createCallback(). Sobrescribiremos el método onToastShown() para aumentar la variable entera que cuenta los toasts mostrados. También se actualiza el texto del TextView que muestra al contador.

A continuación se ve el resultado final al juntar toda la asignación de atributos para crear el Toast.

Ejemplo de Toast en Android

Únete Al Discord De Develou

Si tienes problemas con el código de este tutorial, preguntas, recomendaciones o solo deseas discutir sobre desarrollo Android conmigo y otros desarrolladores, únete a la comunidad de Discord de Develou y siéntete libre de participar como gustes. ¡Te espero!