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

91

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 dans 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 const int avec la valeur 1. Mais je n'ai pas pu trouver où est la durée réelle définie.

Lukap
la source
avez-vous essayé de spécifier des milliseocnds dans setDuration ()? Les documents indiquent qu'il sera configurable par l'utilisateur, mais ne sont pas spécifiques à ce problème
Konstantin Pribluda

Réponses:

181

Répondu ici . Comme vous l'avez mentionné Toast.LENGTH_SHORTet Toast.LENGTH_LONGne sont pas en ms mais en 0 ou en 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
Lars
la source
14

Les Toast.LENGTH_SHORTet ne Toast.LENGTH_LONGsont que des drapeaux.
Vous pouvez trouver ici la source officielle d' 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);
     }
}
Gabriele Mariotti
la source
1
Maintenant, il est changé pour: static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same
Mayank Sharma
7

il est vrai que nous ne sommes pas autorisés à modifier la durée du toast. Mais si vous recherchez une alternative et que vous avez vraiment besoin de le faire avec un toast, vous pouvez essayer ceci.

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.

PasinduJay
la source
3
Comme il est clairement mentionné comme «impossible à faire» dans les réponses précédentes, je propose une méthode alternative et je l'ai clairement mentionnée également. J'espère que tu peux comprendre. Je viens de chercher maintenant et j'ai découvert que le même genre de question était là et je passe en revue les réponses dont certaines sont des alternatives. Mais je ne trouve pas de votes négatifs pour eux. Mieux vaut trouver des alternatives que d'être dit impossible, n'est-ce pas? J'espère que cela a du sens. Un toast Android peut-il être plus long que "Toast.LENGTH_LONG"?
PasinduJay
3

Vous devez définir le remplacement de durée, avec setDurationdans l'action, exemple:

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

Je me demande pourquoi n'utilisez-vous pas 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;
}
Dong Thang
la source
Vous pouvez uniquement affecter une valeur int: LENGTH_SHORT ou LENGTH_LONG.
Gabriele Mariotti
0

Par essais et erreurs, j'ai trouvé que Toast.LENGTH_LONGdurait très près de 2500 ms

Marché
la source