What is the duration of a Toast LENGTH_LONG and LENGTH_SHORT
AndroidTimeToastDurationMillisecondsAndroid Problem Overview
I need the exact duration of LENGTH_LONG and LENGTH_SHORT in milliseconds (ms). Also I need to know if the duration of Toast message with LENGTH_LONG will have the same duration in any phone and with any API version.
Does someone know where is the duration defined ?, I mean defined in ms . I know that LENGTH_LONG is some int const with value 1. But I could not find where is the actual duration defined.
Android Solutions
Solution 1 - Android
Answered here. Like you mentioned Toast.LENGTH_SHORT
and Toast.LENGTH_LONG
are not in ms but 0 or 1.
The actual durations are:
private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds
Solution 2 - Android
The Toast.LENGTH_SHORT
and Toast.LENGTH_LONG
are just flags.
You can find here the official android source where these flags are defined:
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);
}
}
Solution 3 - Android
its true that we are not allowed to change the duration of the Toast. But if you are searching for an alternative and you really need to do this with a Toast, then you can try this.
Keep another duplicate toast in the next line
Ex:
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
The user won't detect any change in transitions between 2 toasts.
Thanks.
Solution 4 - Android
You need set the duration override, with setDuration
in the action, example:
int s = 6000; // milisegundo
Snackbar.make(coordinatorLayout, "This is my Snackbar", Snackbar.LENGTH_LONG).setDuration(s)
.show();
Solution 5 - Android
I am wondering that why do you not use method setDuration() supported in Toast.java class???
/**
* Set how long to show the view for.
* @see #LENGTH_SHORT
* @see #LENGTH_LONG
*/
public void setDuration(@Duration int duration) {
mDuration = duration;
}
Solution 6 - Android
LENGTH_SHORT
& LENGTH_LONG
are mapped to time interval of
1 Second (1000mS) & 5 Seconds (5000mS) respectively,
To see this you need to dig into AOSP source code of Toast. in Toast class time interval is decided based on the FLAG
mParams.hideTimeoutMilliseconds = mDuration == Toast.LENGTH_LONG ? LONG_DURATION_TIMEOUT : SHORT_DURATION_TIMEOUT;
where
static final long SHORT_DURATION_TIMEOUT = 5000;
static final long LONG_DURATION_TIMEOUT = 1000;
Solution 7 - Android
Through trial and error I have found Toast.LENGTH_LONG
lasts very close to 2500ms