吐司LENGTH_LONG和LENGTH_SHORT的持续时间是多长时间


91

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

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


您是否尝试仅在setDuration()中指定milliseocnds?文件说,它应是用户可配置的,但都没有具体的对这个问题
康斯坦丁Pribluda

Answers:


181

在这里回答。就像您提到的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

14

Toast.LENGTH_SHORTToast.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);
     }
}

1
现在,它更改为: static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same
Mayank Sharma

7

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

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

例如:

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

用户将不会检测到两次吐司之间过渡的任何变化。

谢谢。


3
由于在先前的答复中明确提到它“不可能做”,因此我提供了一种替代方法,并且我也明确提到了它。希望你能理解。我现在进行搜索,发现那里存在同样的问题,并回答了其中的一些替代方案。但是我找不到他们的任何否决票。寻找替代品总比说不可能唯一好呢?希望这有道理。 Android Toast可以长于“ Toast.LENGTH_LONG”吗?
PasinduJay

3

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

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

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;
}

您只能分配一个整数值:LENGTH_SHORT或LENGTH_LONG。
加布里埃尔·马里奥蒂

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.