Мне нужна точная продолжительность LENGTH_LONG и LENGTH_SHORT в миллисекундах (мс). Также мне нужно знать, будет ли длительность Toast-сообщения с LENGTH_LONG одинаковой на любом телефоне и с любой версией API.
Кто-нибудь знает, где определяется продолжительность? Я имею в виду, что определяется в мс. Я знаю, что LENGTH_LONG - это некоторый int const со значением 1. Но я не смог найти, где определяется фактическая продолжительность.
Ответы:
Ответили здесь . Как вы упомянули,
Toast.LENGTH_SHORT
иToast.LENGTH_LONG
не в мс, а 0 или 1.Фактическая продолжительность:
private static final int LONG_DELAY = 3500; // 3.5 seconds private static final int SHORT_DELAY = 2000; // 2 seconds
источник
Toast.LENGTH_SHORT
ИToast.LENGTH_LONG
просто флаги.Вы можете найти здесь официальный источник Android, в котором определены эти флаги :
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); } }
источник
static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same
это правда, что нам не разрешено изменять продолжительность тоста. Но если вы ищете альтернативу, и вам действительно нужно сделать это с помощью тоста, вы можете попробовать это.
В следующей строке оставьте еще один повторяющийся тост
Пример:
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show(); Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
Пользователь не обнаружит никаких изменений в переходах между двумя тостами.
Спасибо.
источник
Вам нужно установить переопределение продолжительности с
setDuration
помощью действия, например:int s = 6000; // milisegundo Snackbar.make(coordinatorLayout, "This is my Snackbar", Snackbar.LENGTH_LONG).setDuration(s) .show();
источник
Мне интересно, почему вы не используете метод setDuration (), поддерживаемый в классе Toast.java ???
/** * Set how long to show the view for. * @see #LENGTH_SHORT * @see #LENGTH_LONG */ public void setDuration(@Duration int duration) { mDuration = duration; }
источник
Путем проб и ошибок я обнаружил, что время работы
Toast.LENGTH_LONG
очень близко к 2500 мс.источник