Al usar setDuration () para un Toast, ¿es posible establecer una longitud personalizada o al menos algo más largo que Toast.LENGTH_LONG
?
android
android-toast
Hussein El Feky
fuente
fuente
toast
etiqueta? Parece relevante para la pregunta ..toast
etiqueta para. Pensé que las etiquetas estaban allí para ayudar a buscar y ordenar, ytoast
definitivamente es una búsqueda común.android
ytoast
parece perfectoRespuestas:
Los valores de
LENGTH_SHORT
yLENGTH_LONG
son 0 y 1. Esto significa que se tratan como indicadores en lugar de duraciones reales, por lo que no creo que sea posible establecer la duración en nada más que estos valores.Si desea mostrar un mensaje al usuario por más tiempo, considere una Notificación de barra de estado . Las notificaciones de la barra de estado se pueden cancelar mediante programación cuando ya no son relevantes.
fuente
Si profundiza en el código de Android, puede encontrar las líneas que indican claramente que no podemos cambiar la duración del mensaje Toast.
y los valores predeterminados para la duración son
fuente
Es posible que desee probar:
duplicar el tiempo Si especifica 3 en lugar de 2, triplicará el tiempo ... etc.
fuente
Toast.cancel()
en lugares apropiadosSi desea
Toast
que persista, descubrí que puede sortearlo haciendo unaTimer
llamadatoast.show()
repetidamente (cada segundo más o menos debería hacerlo). Las llamadasshow()
no interrumpen nada siToast
ya se muestra, pero actualiza la cantidad de tiempo que permanece en la pantalla.fuente
ViewGroup
OnTouch
evento. Para optimizar esto, probablemente debería hacer que su temporizador se repita tan cerca del tiempo real queToast
se muestra en la pantalla (3.5 segundos por mucho tiempo, 2 segundos por poco tiempo)He desarrollado una clase de Toast personalizada con la que puede mostrar Toast durante un tiempo deseado (en Milli segundos)
fuente
Codifiqué una clase auxiliar para hacer esto. Puede ver el código en github: https://github.com/quiqueqs/Toast-Expander/blob/master/src/com/thirtymatches/toasted/ToastedActivity.java
Así es como mostrarías una tostada durante 5 segundos (o 5000 milisegundos):
fuente
Sé que llego un poco tarde, pero tomé la respuesta de Regis_AG y la envolví en una clase auxiliar y funciona muy bien.
En el código de su aplicación, simplemente haga algo como esto:
fuente
Sé que la respuesta es bastante tardía ... Tuve el mismo problema y decidí implementar mi propia versión de Toast, después de buscar el código fuente de Android para Toast.
Básicamente, debe crear un nuevo administrador de ventanas, y mostrar y ocultar la ventana durante el tiempo de duración deseado utilizando un controlador
Después de inicializar el diseño, puede usar sus propios métodos de ocultar y mostrar
Ahora todo lo que necesita es agregar dos subprocesos ejecutables que llamen a handleShow () y handleHide () que podría publicar en el controlador.
y la parte final
Esta fue una implementación rápida y sucia. No he tenido en cuenta ningún rendimiento.
fuente
Pantalla de tostadas LONG_DELAY durante 3.5 segundos y pantalla de tostadas SHORT_DELAY durante 2 segundos .
Toast usa INotificationManager internamente y llama a su método enqueueToast cada vez que se llama a Toast.show ().
Llamar al show () con SHORT_DELAY dos veces pondrá en cola la misma tostada de nuevo. se mostrará durante 4 segundos (2 segundos + 2 segundos).
Del mismo modo, llame al show () con LONG_DELAY dos veces y volverá a poner en cola el mismo brindis. se mostrará durante 7 segundos (3.5 segundos + 3.5 segundos)
fuente
Aquí hay una clase personalizada de Toast que hice usando el código anterior:
fuente
Si necesita una tostada larga, hay una alternativa práctica, pero requiere que su usuario haga clic en un botón Aceptar para que desaparezca. Puede usar un AlertDialog como este:
Si tiene un mensaje largo, lo más probable es que no sepa cuánto tiempo le tomará a su usuario leer el mensaje, por lo que a veces es una buena idea pedirle a su usuario que haga clic en un botón Aceptar para continuar. En mi caso, uso esta técnica cuando un usuario hace clic en un icono de ayuda.
fuente
Service
, donde no hay interfaz de usuario.Según lo mencionado por otros, Android Toast puede ser LENGTH_LONG o LENGTH_SHORT. No hay forma de evitar esto, ni debes seguir ninguno de los 'hacks' publicados.
El propósito de Toast es mostrar información "no esencial" y, debido a su efecto persistente, los mensajes pueden quedar fuera de contexto si su duración supera un cierto umbral. Si las tostadas de stock se modificaran para que puedan mostrarse más de LENGTH_LONG, el mensaje permanecería en la pantalla hasta que finalice el proceso de la aplicación, ya que las vistas de tostadas se agregan al WindowManager y no un ViewGroup en su aplicación. Supongo que es por eso que está codificado.
Si necesita mostrar un mensaje de estilo tostado durante más de tres segundos y medio, le recomiendo que cree una vista que se adjunte al contenido de la Actividad, de esa forma desaparecerá cuando el usuario salga de la aplicación. Mi biblioteca de SuperToasts trata este problema y muchos otros, ¡no dudes en usarlo! Lo más probable es que te interese usar SuperActivityToasts
fuente
Simplemente use SuperToast para hacer un brindis elegante en cualquier situación. Haz que tus tostadas sean coloridas . Edite el color de su fuente y también su tamaño . Espero que sea todo en uno para ti.
fuente
¿Por qué comer Toast, cuando puedes tener toda la Snackbar : https://developer.android.com/reference/android/support/design/widget/Snackbar.html
Snackbar> Tostadas, tostadas personalizadas, picatostes
fuente
Aquí hay un método muy simple que funcionó para mí:
for (int i=0; i < 3; i++) { Toast.makeText(this, "MESSAGE", Toast.LENGTH_SHORT).show(); }
La duración de LENGTH_SHORT es de 2 segundos y LENGTH_LONG es de 3.5 segundos. Aquí el mensaje de tostada se mostrará durante 6 segundos ya que está encerrado en un bucle for. Pero un inconveniente de este método es que después de cada 2 segundos puede surgir un pequeño efecto de desvanecimiento. Pero no se nota mucho. Espero que sea útil
fuente
El usuario no puede personalizar la duración del Toast. porque la función scheduleTimeoutLocked () de NotificationManagerService no usa la duración del campo. El código fuente es el siguiente.
fuente
Use Crouton, es una biblioteca Toast muy flexible.
Cuscurro
Puedes usarlo como tostadas:
¡o incluso puede ir un poco más profundo y personalizarlo más, como configurar el tiempo en infinito! Por ejemplo, aquí quiero mostrar un mensaje tostado hasta que el usuario lo reconozca haciendo clic en él.
Diseño personalizado que se inflará para el brindis.
fuente
La duración de la tostada se puede hackear usando un hilo que ejecuta la tostada exclusivamente. Esto funciona (ejecuta la tostada durante 10 segundos, modifica el sueño y el control a tu gusto):
fuente
Un brindis con fondo y vista personalizados me sirvió. Lo probé en la tableta nexus 7 y no noté ninguna animación de desvanecimiento gradual durante el bucle. Aquí está la implementación:
Aquí está la vista de texto personalizada utilizada en el código anterior:
@ drawable / fragment_background está haciendo que mi tostada tenga una esquina redondeada como en la versión kitkat. También puede agregar otras vistas en el archivo. Se recomienda cualquier modificación para mejorar y comentar ya que planeo implementar esto en mi aplicación en vivo.
fuente
Programe una cuenta regresiva hasta un momento en el futuro, con notificaciones regulares en intervalos en el camino. Ejemplo de mostrar una cuenta regresiva de 30 segundos en un campo de texto:
fuente
Este texto desaparecerá en 5 segundos.
Editar: como dijo Itai Spector en el comentario, se mostrará aproximadamente 3.5 segundos, así que use este código:
fuente
No, y la mayoría / todos los hacks enumerados aquí ya no funcionan en Android 9. Pero hay una solución mucho mejor: si necesita un mensaje, use un cuadro de diálogo.
fuente
Un enfoque muy simple para crear un mensaje un poco más largo es el siguiente:
Tenga en cuenta que el ejemplo anterior elimina la opción LENGTH_SHORT para mantener el ejemplo simple.
Por lo general, no querrá usar un mensaje Toast para mostrar mensajes durante intervalos muy largos, ya que ese no es el propósito previsto de la clase Toast. Pero hay ocasiones en que la cantidad de texto que necesita mostrar puede llevar al usuario más de 3.5 segundos para leer, y en ese caso una pequeña extensión de tiempo (por ejemplo, a 6.5 segundos, como se muestra arriba) puede, en mi opinión, ser útil y consistente con el uso previsto.
fuente
Establece un brindis por un período específico en milisegundos:
fuente
fuente
Después de fallar con todas las soluciones disponibles, finalmente tuve una solución alternativa usando recursión.
Código:
fuente
Una solución muy simple a la pregunta. Dos o tres veces hará que Toast dure más. Es la única forma de evitarlo.
fuente
Puede establecer el tiempo deseado en milisegundos en el
Toast.makeText();
método de esta manera:fuente