我需要LENGTH_LONG和LENGTH_SHORT的确切持续时间(以毫秒为单位)。我还需要知道在任何手机和任何API版本中,带有LENGTH_LONG的Toast消息的持续时间是否将具有相同的持续时间。
有人知道持续时间在哪里定义吗?我的意思是用ms定义。我知道LENGTH_LONG是一些值为1的int const。但是我找不到实际的持续时间在哪里定义。
Answers:
该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);
}
}
static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same
确实,我们不允许更改吐司的持续时间。但是,如果您正在寻找替代品,而您确实需要用Toast做到这一点,那么可以尝试一下。
在下一行中保留另一个重复的吐司
例如:
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).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;
}