我需要LENGTH_LONG和LENGTH_SHORT的确切持续时间(以毫秒为单位)。我还需要知道在任何手机和任何API版本中,带有LENGTH_LONG的Toast消息的持续时间是否将具有相同的持续时间。
有人知道持续时间在哪里定义吗?我的意思是用ms定义。我知道LENGTH_LONG是一些值为1的int const。但是我找不到实际的持续时间在哪里定义。
Answers:
该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做到这一点,那么可以尝试一下。
在下一行中保留另一个重复的吐司
例如:
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
用户将不会检测到两次吐司之间过渡的任何变化。
谢谢。
我想知道为什么您不使用Toast.java类中支持的setDuration()方法?
 /**
 * Set how long to show the view for.
 * @see #LENGTH_SHORT
 * @see #LENGTH_LONG
 */
public void setDuration(@Duration int duration) {
    mDuration = duration;
}