Toast LENGTH_LONG和LENGTH_SHORT的持续时间是多长?

时间:2011-11-01 10:26:25

标签: android time toast duration milliseconds

我需要LENGTH_LONG和LENGTH_SHORT的确切持续时间,以毫秒(ms)为单位。此外,我需要知道在任何手机和任何API版本中,使用LENGTH_LONG的Toast消息的持续时间是否具有相同的持续时间。

有人知道定义的持续时间在哪里吗?我的意思是以ms为单位定义。我知道LENGTH_LONG是一个值为1的int const但是我找不到定义的实际持续时间。

7 个答案:

答案 0 :(得分:159)

回答here。就像你提到的那样Toast.LENGTH_SHORTToast.LENGTH_LONG不是ms,而是0或1。

实际持续时间为:

private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds

答案 1 :(得分:13)

这里定义了这些标志的官方android source

public class NotificationManagerService extends SystemService {

    static final int LONG_DELAY = 3500; // 3.5 seconds
    static final int SHORT_DELAY = 2000; // 2 seconds

    private void scheduleTimeoutLocked(ToastRecord r){
        mHandler.removeCallbacksAndMessages(r);
        Message m = Message.obtain(mHandler, MESSAGE_TIMEOUT, r);
        long delay = r.duration == Toast.LENGTH_LONG ? LONG_DELAY : SHORT_DELAY;
        mHandler.sendMessageDelayed(m, delay);
    }
}

答案 2 :(得分:7)

确实我们不允许改变Toast的持续时间。但是如果你正在寻找另一种选择,而你真的需要用Toast来做,那么你可以试试这个。

在下一行保留另一个重复的吐司

例如:

Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();

用户不会检测到2个吐司之间转换的任何变化。

感谢。

答案 3 :(得分:4)

您需要设置持续时间替代,在操作中使用setDuration,例如:

int s = 6000; // milisegundo    
Snackbar.make(coordinatorLayout, "This is my Snackbar", Snackbar.LENGTH_LONG).setDuration(s)
.show();

答案 4 :(得分:2)

我想知道为什么您不使用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;
}

答案 5 :(得分:1)

通过试错我发现Toast.LENGTH_LONG非常接近 2500ms

答案 6 :(得分:1)

LENGTH_SHORT & LENGTH_LONG 被映射到时间间隔 1 秒 (1000 毫秒)5 秒 (5000 毫秒)

要看到这一点,您需要深入研究 Toast 的 AOSP 源代码。在 Toast 类的时间间隔是根据 FLAG 决定的

mParams.hideTimeoutMilliseconds = mDuration == Toast.LENGTH_LONG ? LONG_DURATION_TIMEOUT : SHORT_DURATION_TIMEOUT;

哪里

  static final long SHORT_DURATION_TIMEOUT = 5000;
  static final long LONG_DURATION_TIMEOUT = 1000;

https://android.googlesource.com/platform/frameworks/base/+/f4bed684c939b0f8809ef404b8609fe4ef849263/core/java/android/widget/Toast.java