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.
Odpowiedzi:
Odpowiedział tutaj . Jak wspomniałeś
Toast.LENGTH_SHORT
iToast.LENGTH_LONG
nie 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
źródło
Toast.LENGTH_SHORT
IToast.LENGTH_LONG
są 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); } }
źródło
static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same
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.
źródło
Musisz ustawić przesłonięcie czasu trwania,
setDuration
w akcji, na przykład:int s = 6000; // milisegundo Snackbar.make(coordinatorLayout, "This is my Snackbar", Snackbar.LENGTH_LONG).setDuration(s) .show();
źródło
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; }
źródło
Poprzez prób i błędów znalazłem
Toast.LENGTH_LONG
trwa bardzo blisko do 2500msźródło