111 votes

Quelle est la durée d'un toast ? LENGTH_LONG et LENGTH_SHORT

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 de l'API.

Quelqu'un sait-il où est définie la durée ? je veux dire définie en ms . Je sais que LENGTH_LONG est un int const avec la valeur 1. Mais je n'ai pas pu trouver où est définie la durée réelle.

0 votes

Avez-vous essayé de spécifier simplement les milliseocnds dans setDuration() ? Les docs disent qu'il doit être configurable par l'utilisateur, mais ne sont pas spécifiques sur ce point.

207voto

Lars Points 1298

Réponse : ici . Comme vous l'avez mentionné Toast.LENGTH_SHORT y 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

16voto

Gabriele Mariotti Points 7243

En Toast.LENGTH_SHORT y Toast.LENGTH_LONG ne sont que des drapeaux.
Vous pouvez trouver ici le document officiel Source Android où ces drapeaux sont définis :

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);
     }
}

9voto

Pasindu Jayaweera Points 190

Il est vrai que nous ne sommes pas autorisés à changer la durée du Toast. Mais si vous cherchez une alternative et que vous avez vraiment besoin de faire cela avec un Toast, alors vous pouvez essayer ceci.

Gardez un autre toast dupliqué 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.

Gracias.

5voto

Faxon Points 83

Vous devez définir la durée de la dérogation, avec setDuration dans l'action, par exemple :

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

3voto

Dong Thang Points 128

Je me demande pourquoi vous n'utilisez pas la méthode setDuration() supportée par 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;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X