¿Cuál es la duración de un Toast LENGTH_LONG y LENGTH_SHORT?

3 minutos de lectura

avatar de usuario
Lukap

Necesito la duración exacta de LENGTH_LONG y LENGTH_SHORT en milisegundos (ms). También necesito saber si la duración del mensaje Toast con LENGTH_LONG tendrá la misma duración en cualquier teléfono y con cualquier versión de API.

¿Alguien sabe donde se define la duración?, osea definida en ms. Sé que LENGTH_LONG es una const int con valor 1. Pero no pude encontrar dónde se define la duración real.

  • ¿Intentó simplemente especificar milisegundos en setDuration ()? Los documentos dicen que será configurable por el usuario, pero no son específicos sobre este tema

    – Konstantin Pribluda

    1 de noviembre de 2011 a las 10:40

avatar de usuario
Lars

Respondido aquí. como mencionaste Toast.LENGTH_SHORT y Toast.LENGTH_LONG no están en ms sino en 0 o 1.

Las duraciones reales son:

private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds

avatar de usuario
gabriele mariotti

los Toast.LENGTH_SHORT y Toast.LENGTH_LONG son solo banderas
Puedes encontrar aquí el oficial fuente androide donde estos banderas están definidos:

public class NotificationManagerService extends SystemService {

    static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT;
    /** Amount of time (in milliseconds) a toast window can be shown. */
    //public static final int TOAST_WINDOW_TIMEOUT = 3500; // 3.5 seconds
    static final int SHORT_DELAY = 2000; // 2 seconds

    private void scheduleDurationReachedLocked(ToastRecord r)
    {
       mHandler.removeCallbacksAndMessages(r);
       Message m = Message.obtain(mHandler, MESSAGE_DURATION_REACHED, r);
       int delay = r.duration == Toast.LENGTH_LONG ? LONG_DELAY : SHORT_DELAY;
       //....
       mHandler.sendMessageDelayed(m, delay);
     }
}

  • Ahora, se cambia a: static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same

    – Mayank Sharma

    26 de diciembre de 2019 a las 7:24


es cierto que no se nos permite cambiar la duración del brindis. Pero si está buscando una alternativa y realmente necesita hacer esto con un Toast, entonces puede probar esto.

Mantenga otro brindis duplicado en la siguiente línea

Ex:

Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();

El usuario no detectará ningún cambio en las transiciones entre 2 brindis.

Gracias.

  • Dado que se menciona claramente como ‘imposible de hacer’ en las respuestas anteriores, proporciono un método alternativo y también lo mencioné claramente. Espero que puedas entenderlo. Acabo de buscar ahora y descubrí que había el mismo tipo de pregunta y revisé las respuestas, algunas de ellas son alternativas. Pero no encuentro ningún voto negativo para ellos. Mejor buscar alternativas que que te digan imposible ¿verdad? Espero que esto tenga sentido. ¿Puede un Toast de Android ser más largo que “Toast.LENGTH_LONG”?

    – PasinduJay

    9 de marzo de 2016 a las 10:01


avatar de usuario
Faxon Lander Montenegro

Debe establecer la anulación de la duración, con setDuration en la acción, ejemplo:

int s = 6000; // milisegundo    
Snackbar.make(coordinatorLayout, "This is my Snackbar", Snackbar.LENGTH_LONG).setDuration(s)
.show();

Me pregunto por qué no usa el método setDuration() compatible con la clase Toast.java.

 /**
 * Set how long to show the view for.
 * @see #LENGTH_SHORT
 * @see #LENGTH_LONG
 */
public void setDuration(@Duration int duration) {
    mDuration = duration;
}

  • Solo puede asignar un valor int: LENGTH_SHORT o LENGTH_LONG.

    – Gabriele Mariotti

    30 de diciembre de 2019 a las 16:03

avatar de usuario
hitesh sahu

LENGTH_SHORT & LENGTH_LONG se asignan al intervalo de tiempo de
1 segundo (1000mS) & 5 segundos (5000mS) respectivamente,

Para ver esto, debe profundizar en el código fuente AOSP de Toast. en el intervalo de tiempo de la clase Toast se decide en función de la BANDERA

mParams.hideTimeoutMilliseconds = mDuration == Toast.LENGTH_LONG ? LONG_DURATION_TIMEOUT : SHORT_DURATION_TIMEOUT;

dónde

  static final long SHORT_DURATION_TIMEOUT = 5000;
  static final long LONG_DURATION_TIMEOUT = 1000;

https://android.googlesource.com/platform/frameworks/base/+/f4bed684c939b0f8809ef404b8609fe4ef849263/core/java/android/widget/Toast.java

  • Solo puede asignar un valor int: LENGTH_SHORT o LENGTH_LONG.

    – Gabriele Mariotti

    30 de diciembre de 2019 a las 16:03

avatar de usuario
Saro Taşciyan

Mediante prueba y error he encontrado Toast.LENGTH_LONG dura muy cerca de 2500ms

¿Ha sido útil esta solución?