我需要以毫秒 (ms) 为单位的 LENGTH_LONG 和 LENGTH_SHORT 的确切持续时间。我还需要知道带有 LENGTH_LONG 的 Toast 消息的持续时间在任何手机和任何 API 版本中是否具有相同的持续时间。
有人知道定义的持续时间在哪里吗?,我的意思是在 ms 中定义。我知道 LENGTH_LONG 是一些值为 1 的 int const。但我找不到实际定义的持续时间在哪里。
我需要以毫秒 (ms) 为单位的 LENGTH_LONG 和 LENGTH_SHORT 的确切持续时间。我还需要知道带有 LENGTH_LONG 的 Toast 消息的持续时间在任何手机和任何 API 版本中是否具有相同的持续时间。
有人知道定义的持续时间在哪里吗?,我的意思是在 ms 中定义。我知道 LENGTH_LONG 是一些值为 1 的 int const。但我找不到实际定义的持续时间在哪里。
在这里回答。就像你提到的那样Toast.LENGTH_SHORT
,Toast.LENGTH_LONG
不是毫秒,而是 0 或 1。
实际持续时间为:
private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds
和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);
}
}
确实,我们不允许更改 Toast 的持续时间。但是,如果您正在寻找替代品并且您确实需要使用 Toast 来做到这一点,那么您可以试试这个。
在下一行保留另一个重复的吐司
前任:
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
用户不会检测到 2 个 toast 之间的转换有任何变化。
谢谢。
您需要在操作中设置持续时间覆盖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;
}
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;
通过反复试验,我发现Toast.LENGTH_LONG
持续时间非常接近2500 毫秒