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.
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
.
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:
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 delToast
(normalmente es la actividad).resId
ótext
: Es el mensaje a desplegar en elToast
.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 constantesLENGTH_SHORT
yLENGTH_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.
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.
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:
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.