如何将Toast的显示时间随意设置

前言

Android里边的Toast控件是应用与用户交互的窗口,用于提示或者警告用户一些交互的信息,但是我们会发现就算设置了Toast.LENGTH_LONG,也只有那么几秒钟时间,那么如何将这一时间随意设置呢?!

方法

首先我们写一方法:

public void showMyToast(final Toast toast, final int cnt) {
        final Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                toast.show();
            }
        }, 0, 3500);
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                toast.cancel();
                timer.cancel();
            }
        }, cnt );
    }

当然我们也可以将此方法设为static,加入到工具类中,方便调用。
接下来使用方法:

Toast toast=Toast.makeText(RegistActivity.this, "这是可以随意设置时间的Toast", Toast.LENGTH_LONG);
showMyToast(toast, 9*1000);

需要注意的地方

  1. 创建Toast对象的时候,要设置Toast.LENGTH_LONG,最后不要调用show()方法
  2. showMyToast()方法,传入两个参数,第一个参数为我们创建的Toast对象,第二个参数为我们想要设置显示的毫秒数

这个方法呢,算是比较巧妙的,也有投机取巧的成分!
因为Android系统Toast的显示,是存在一个Toast队列的,当一个Toast显示之后,它会从队列中取出来下一个来显示
还有在源码中Toast.LENGTH_LONG显示时间有3500毫秒,LENGTH_SHORT显示时间为2000毫秒,这个我们可以在源码中找到:
frameworks\base\services\Java\com\android\server路径下有个NotificationManagerService.java的文件:

private static final int LONG_DELAY = 3500; 
private static final int SHORT_DELAY = 2000;

我们这里采用的方法,使用一个Timer去调度一个TimeTask,delay设置的是0s,所以立即执行toast.show(),然后每隔3.5s就又执行一遍,依次类推!
最后,使用另一个Timer去调度取消之前的timer和撤销toast,而这里设置了延迟cnt毫秒执行,这里的cnt就是我们想要展示的毫秒数!

    原文作者:木大白易
    原文地址: https://blog.csdn.net/aiynmimi/article/details/51210048
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞