J'ai besoin de la durée exacte de LENGTH_LONG et LENGTH_SHORT en millisecondes (ms). J'ai également besoin de savoir si la durée du message Toast avec LENGTH_LONG aura la même durée sur n'importe quel téléphone et avec n'importe quelle version d'API.
Est-ce que quelqu'un sait où est définie la durée?, Je veux dire définie en ms. Je sais que LENGTH_LONG est un entier constant avec la valeur 1. Mais je n'ai pas pu trouver où est définie la durée réelle.
Répondu ici . Comme vous l'avez mentionné Toast.LENGTH_SHORT
et Toast.LENGTH_LONG
ne sont pas en ms mais 0 ou 1.
Les durées réelles sont:
private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds
Voici l'officiel source Android où ces drapeaux sont définis:
public class NotificationManagerService extends SystemService {
static final int LONG_DELAY = 3500; // 3.5 seconds
static final int SHORT_DELAY = 2000; // 2 seconds
private void scheduleTimeoutLocked(ToastRecord r){
mHandler.removeCallbacksAndMessages(r);
Message m = Message.obtain(mHandler, MESSAGE_TIMEOUT, r);
long delay = r.duration == Toast.LENGTH_LONG ? LONG_DELAY : SHORT_DELAY;
mHandler.sendMessageDelayed(m, delay);
}
}
il est vrai que nous ne sommes pas autorisés à modifier la durée du toast. Mais si vous cherchez une alternative et que vous avez vraiment besoin de le faire avec un toast, vous pouvez l'essayer.
Gardez un autre toast en double dans la ligne suivante
Ex:
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
L'utilisateur ne détectera aucun changement dans les transitions entre 2 toasts.
Merci.
Vous devez définir le remplacement de durée, avec setDuration
dans l'action, exemple:
int s = 6000; // milisegundo
Snackbar.make(coordinatorLayout, "This is my Snackbar", Snackbar.LENGTH_LONG).setDuration(s)
.show();
Je me demande pourquoi ne pas utiliser la méthode setDuration () prise en charge dans la classe Toast.Java ???
/**
* Set how long to show the view for.
* @see #LENGTH_SHORT
* @see #LENGTH_LONG
*/
public void setDuration(@Duration int duration) {
mDuration = duration;
}
Par essais et erreurs j'ai trouvé Toast.LENGTH_LONG
dure très près de 2500ms