Jaki jest czas trwania Toast LENGTH_LONG i LENGTH_SHORT

95

Potrzebuję dokładnego czasu trwania LENGTH_LONG i LENGTH_SHORT w milisekundach (ms). Muszę również wiedzieć, czy czas trwania wiadomości Toast z LENGTH_LONG będzie taki sam w każdym telefonie i dowolnej wersji API.

Czy ktoś wie, gdzie jest zdefiniowany czas trwania?, Mam na myśli zdefiniowany w ms. Wiem, że LENGTH_LONG to jakaś stała int o wartości 1. Ale nie mogłem znaleźć, gdzie jest zdefiniowany rzeczywisty czas trwania.

Lukap
źródło
czy próbowałeś po prostu określić miliseocnds w setDuration ()? Dokumenty mówią, że powinno być konfigurowalne przez użytkownika, ale nie są specyficzne w tym problemie
Konstantin Pribluda

Odpowiedzi:

184

Odpowiedział tutaj . Jak wspomniałeś Toast.LENGTH_SHORTi Toast.LENGTH_LONGnie są w ms, ale 0 lub 1.

Rzeczywiste czasy trwania to:

private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds
Lars
źródło
14

Toast.LENGTH_SHORTI Toast.LENGTH_LONGsą tylko flagi.
Możesz znaleźć tutaj oficjalne źródło Androida, w którym zdefiniowano te flagi :

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
źródło
1
Teraz zmienia się na: static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same
Mayank Sharma
7

to prawda, że ​​nie wolno nam zmieniać czasu trwania Toastu. Ale jeśli szukasz alternatywy i naprawdę musisz to zrobić z Toastem, możesz spróbować tego.

Zachowaj kolejny podwójny toast w następnym wierszu

Dawny:

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

Użytkownik nie wykryje żadnej zmiany w przejściach między 2 toastami.

Dzięki.

PasinduJay
źródło
3
Ponieważ w poprzednich odpowiedziach wyraźnie wspomniano o tym jako „niemożliwe”, zapewniam metodę alternatywną i wyraźnie o niej wspomniałem. Mam nadzieję, że zrozumiesz. Właśnie przeszukałem teraz i dowiedziałem się, że było tam to samo pytanie i przejrzałem odpowiedzi, niektóre z nich są alternatywami. Ale nie znajduję dla nich żadnych głosów negatywnych. Lepiej znaleźć alternatywy, niż być uznanym za niemożliwe tylko, prawda? Mam nadzieję, że to ma sens. Czy toast na Androida może być dłuższy niż „Toast.LENGTH_LONG”?
PasinduJay
3

Musisz ustawić przesłonięcie czasu trwania, setDurationw akcji, na przykład:

int s = 6000; // milisegundo    
Snackbar.make(coordinatorLayout, "This is my Snackbar", Snackbar.LENGTH_LONG).setDuration(s)
.show();
Faxon
źródło
2

Zastanawiam się, dlaczego nie używasz metody setDuration () obsługiwanej w klasie 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
źródło
Możesz przypisać tylko wartość int: LENGTH_SHORT lub LENGTH_LONG.
Gabriele Mariotti
0

Poprzez prób i błędów znalazłem Toast.LENGTH_LONGtrwa bardzo blisko do 2500ms

Targowisko
źródło