110

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

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

4

7 回答 7

201

在这里回答。就像你提到的那样Toast.LENGTH_SHORTToast.LENGTH_LONG不是毫秒,而是 0 或 1。

实际持续时间为:

private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds
于 2011-11-01T10:32:32.560 回答
16

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);
     }
}
于 2015-05-08T20:33:09.163 回答
8

确实,我们不允许更改 Toast 的持续时间。但是,如果您正在寻找替代品并且您确实需要使用 Toast 来做到这一点,那么您可以试试这个。

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

前任:

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

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

谢谢。

于 2016-03-09T07:15:26.777 回答
4

您需要在操作中设置持续时间覆盖setDuration,例如:

int s = 6000; // milisegundo    
Snackbar.make(coordinatorLayout, "This is my Snackbar", Snackbar.LENGTH_LONG).setDuration(s)
.show();
于 2018-09-18T01:27:35.223 回答
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;
}
于 2018-07-16T04:10:41.403 回答
1

LENGTH_SHORT&LENGTH_LONG分别映射到 1 秒 (1000mS)5 秒 ( 5000mS) 的时间间隔,

要看到这一点,您需要深入研究 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

于 2021-02-02T11:30:22.340 回答
0

通过反复试验,我发现Toast.LENGTH_LONG持续时间非常接近2500 毫秒

于 2015-05-08T18:11:31.627 回答