在另一个 toast 替换它之前,如何确保 toast 在屏幕上显示特定时间?
How do I make sure a toast is on screen for a specific time before another toast replaces it?
我刚开始学习Android。我使用我的 MIUI 10 设备进行调试。
我已经学习了非常基础的 App Lifecycle Program。问题是,我正在使用 toasts 来显示何时调用每个方法。例如:当我按下后退按钮时,onPause、onStop 和 onDestroy 是将显示的 3 个单独的祝酒词。
我遇到的问题是,如果调用另一个toast,MIUI会自动取消当前的toast。所以我最终只显示了 onDestroy toast。
有没有办法确保我在下一个出现之前在屏幕上显示一段设定的时间?这不一定只适用于这种情况。我需要一个对未来也有帮助的通用解决方案。
如果 MIUI 的 Android 版本更改了按顺序显示 Toasts 的默认行为,您可以随时 post 自行延迟。长toast的标准延时是3500ms,短toast是2000ms。考虑到这一点,您可以尝试以下方式(未经测试):
final Handler uiHandler = new Handler(Looper.getMainLooper());
void scheduleToasts(String... messages) {
final List<String> list = Arrays.asList(messages);
Collections.reverse(list);
final AtomicInteger countdown = new AtomicInteger(list.size());
final ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleWithFixedDelay(() -> {
final int count = countdown.getAndDecrement();
if(count == 0) {
service.shutdown();
return;
}
uiHandler.post(() -> Toast.makeText(getContext(), list.get(count), Toast.LENGTH_LONG).show());
}, 0, 3500, TimeUnit.MILLISECONDS);
}
使用情况:
scheduleToasts("message1", "message2", "message3");
我刚开始学习Android。我使用我的 MIUI 10 设备进行调试。
我已经学习了非常基础的 App Lifecycle Program。问题是,我正在使用 toasts 来显示何时调用每个方法。例如:当我按下后退按钮时,onPause、onStop 和 onDestroy 是将显示的 3 个单独的祝酒词。
我遇到的问题是,如果调用另一个toast,MIUI会自动取消当前的toast。所以我最终只显示了 onDestroy toast。
有没有办法确保我在下一个出现之前在屏幕上显示一段设定的时间?这不一定只适用于这种情况。我需要一个对未来也有帮助的通用解决方案。
如果 MIUI 的 Android 版本更改了按顺序显示 Toasts 的默认行为,您可以随时 post 自行延迟。长toast的标准延时是3500ms,短toast是2000ms。考虑到这一点,您可以尝试以下方式(未经测试):
final Handler uiHandler = new Handler(Looper.getMainLooper());
void scheduleToasts(String... messages) {
final List<String> list = Arrays.asList(messages);
Collections.reverse(list);
final AtomicInteger countdown = new AtomicInteger(list.size());
final ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleWithFixedDelay(() -> {
final int count = countdown.getAndDecrement();
if(count == 0) {
service.shutdown();
return;
}
uiHandler.post(() -> Toast.makeText(getContext(), list.get(count), Toast.LENGTH_LONG).show());
}, 0, 3500, TimeUnit.MILLISECONDS);
}
使用情况:
scheduleToasts("message1", "message2", "message3");