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.
Respuestas:
Respondido aquí . Como mencionaste
Toast.LENGTH_SHORT
yToast.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
fuente
Los
Toast.LENGTH_SHORT
yToast.LENGTH_LONG
son 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); } }
fuente
static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same
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.
fuente
Necesita establecer la anulación de 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();
fuente
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; }
fuente
A través de prueba y error , he encontrado que
Toast.LENGTH_LONG
dura muy cerca de 2500ms.fuente