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

Luk*_*kap 80 time android duration milliseconds toast

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

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

Lar*_*ars 166

这里回答.就像你提到的那样Toast.LENGTH_SHORT,Toast.LENGTH_LONG不是ms,而是0或1.

实际持续时间是:

private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds
Run Code Online (Sandbox Code Playgroud)


Gab*_*tti 14

这里是定义这些标志的官方android源:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Pas*_*Jay 7

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

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

例如:

Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

  • 由于在之前的回复中明确提到"不可能做",我提供了一种替代方法,我也清楚地提到了它.希望你能理解.我现在只是搜索并发现同样的问题,并通过答案,其中一些是替代品.但我没有找到任何对他们的投票.更好地找到替代方案而不是说不可能只是对吗?希望这是有道理的.[Android Toast可以比"Toast.LENGTH_LONG"长吗?](http://stackoverflow.com/questions/2220560/can-an-android-toast-be-longer-than-toast-length-long) (3认同)

小智 5

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

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