web-dev-qa-db-fra.com

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 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.

78
Lukap

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
162
Lars

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

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.

7
Pasindu Jay

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();
4
Faxon

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;
}
2
Dong Thang

Par essais et erreurs j'ai trouvé Toast.LENGTH_LONG dure très près de 2500ms

0
Mart