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

95

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 dónde está definida la duración ?, quiero decir definida en ms. Sé que LENGTH_LONG es una constante int con valor 1. Pero no pude encontrar dónde se define la duración real.

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

Respuestas:

184

Respondido aquí . Como mencionaste Toast.LENGTH_SHORTy Toast.LENGTH_LONGno 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
Lars
fuente
14

Los Toast.LENGTH_SHORTy Toast.LENGTH_LONGson solo banderas.
Puede encontrar aquí la fuente oficial de Android donde se definen estas banderas :

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);
     }
}
Gabriele Mariotti
fuente
1
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
7

es cierto que no podemos cambiar la duración del brindis. Pero si está buscando una alternativa y realmente necesita hacer esto con un brindis, 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.

PasinduJay
fuente
3
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. Es mejor encontrar alternativas que decir que solo es imposible, ¿verdad? Espero que esto tenga sentido. ¿Puede un Android Toast ser más largo que "Toast.LENGTH_LONG"?
PasinduJay
3

Necesita establecer la anulación de duración, con setDurationen la acción, ejemplo:

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

Me pregunto por qué no utiliza 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;
}
Dong Thang
fuente
Solo puede asignar un valor int: LENGTH_SHORT o LENGTH_LONG.
Gabriele Mariotti
0

A través de prueba y error , he encontrado que Toast.LENGTH_LONGdura muy cerca de 2500ms.

Mercado
fuente