Qual è la durata di un brindisi LENGTH_LONG e LENGTH_SHORT


91

Ho bisogno della durata esatta di LENGTH_LONG e LENGTH_SHORT in millisecondi (ms). Inoltre devo sapere se la durata del messaggio Toast con LENGTH_LONG avrà la stessa durata in qualsiasi telefono e con qualsiasi versione API.

Qualcuno sa dove è definita la durata?, Intendo definita in ms. So che LENGTH_LONG è un int const con valore 1. Ma non sono riuscito a trovare dove sia definita la durata effettiva.


hai provato a specificare solo milliseocnd in setDuration ()? I documenti dicono che sarà configurabile dall'utente, ma non sono specifici su questo problema
Konstantin Pribluda

Risposte:


181

Risposta qui . Come hai accennato Toast.LENGTH_SHORTe Toast.LENGTH_LONGnon sono in ms ma 0 o 1.

Le durate effettive sono:

private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds

14

Le Toast.LENGTH_SHORTe Toast.LENGTH_LONGsono solo bandiere.
Puoi trovare qui la fonte Android ufficiale in cui sono definiti questi flag :

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

1
Ora è cambiato in: static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same
Mayank Sharma

7

è vero che non ci è permesso cambiare la durata del brindisi. Ma se stai cercando un'alternativa e hai davvero bisogno di farlo con un Toast, allora puoi provare questo.

Mantieni un altro toast duplicato nella riga successiva

Ex:

Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();

L'utente non rileverà alcun cambiamento nelle transizioni tra 2 toast.

Grazie.


3
Poiché è chiaramente indicato come "impossibile da fare" nelle risposte precedenti, sto fornendo un metodo alternativo e l'ho anche menzionato chiaramente. Spero tu possa capire. Ho appena cercato ora e ho scoperto che c'era lo stesso tipo di domanda e ho esaminato le risposte che alcune di esse sono alternative. Ma non trovo voti negativi per loro. Meglio per trovare alternative che essere detto impossibile solo giusto? Spero che questo abbia un senso. Un Toast Android può essere più lungo di "Toast.LENGTH_LONG"?
PasinduJay

3

È necessario impostare la sostituzione della durata, con setDurationnell'azione, esempio:

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

2

Mi chiedo perché non usi il metodo setDuration () supportato nella 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;
}

Puoi assegnare solo un valore int: LENGTH_SHORT o LENGTH_LONG.
Gabriele Mariotti

0

Attraverso tentativi ed errori ho scoperto che Toast.LENGTH_LONGdura molto vicino a 2500ms

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.