我需要LENGTH_LONG和LENGTH_SHORT的确切持续时间,以毫秒(ms)为单位。此外,我需要知道LENGTH_LONG的Toast消息的持续时间是否在任何电话和任何API版本中具有相同的持续时间。
有人知道定义的持续时间在哪里吗?我的意思是用ms定义。我知道LENGTH_LONG是一个值为1的int const但是我找不到定义的实际持续时间。
回答here。就像你提到的那样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
这里是定义这些标志的官方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);
}
}
确实,我们不允许改变Toast的持续时间。但是如果你正在寻找另一种选择,你真的需要用Toast来做这个,那么你可以试试这个。
在下一行保留另一个重复的吐司
例如:
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
用户不会检测到2个吐司之间转换的任何变化。
谢谢。
您需要设置持续时间覆盖,在操作中使用setDuration
,例如:
int s = 6000; // milisegundo
Snackbar.make(coordinatorLayout, "This is my Snackbar", Snackbar.LENGTH_LONG).setDuration(s)
.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;
}
通过反复试验,我发现Toast.LENGTH_LONG
持续非常接近2500毫秒