What is the duration of a Toast LENGTH_LONG and LENGTH_SHORT

74,405

Solution 1

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

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

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

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

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;
}
Share:
74,405

Related videos on Youtube

Lukap
Author by

Lukap

Before I was user706780 :-),than Luk ,than ....

Updated on July 08, 2022

Comments

  • Lukap
    Lukap almost 2 years

    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.

    • Konstantin Pribluda
      Konstantin Pribluda over 12 years
      did you tried to just specify milliseocnds in setDuration()? Docs say it shall be user configurable, but are not specific on this issue
  • PasinduJay
    PasinduJay about 8 years
    Since it is clearly mentioned as 'impossible to do' in the previous replies I'm providing an alternative method and I clearly mentioned it as well. Hope you can understand. I just searched now and found out same kind of question was there and go through the answers some of them are alternatives. But I don't find any down votes for them. Better for find alternatives than being said impossible only right? Hope this make sense. Can an Android Toast be longer than “Toast.LENGTH_LONG”?
  • Mayank Sharma
    Mayank Sharma over 4 years
    Now, it is changed to: static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same
  • Gabriele Mariotti
    Gabriele Mariotti over 4 years
    You can only assign an int value: LENGTH_SHORT, or LENGTH_LONG.