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

Posted 木大白易

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将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就是我们想要展示的毫秒数!

以上是关于如何将Toast的显示时间随意设置的主要内容,如果未能解决你的问题,请参考以下文章

Android Toast(吐司)的基本使用

toast是啥意思

如何将android中显示在桌面上的Toast位置调整

如何将android中显示在桌面上的Toast位置调整

c# WINFORM窗体如何设置才可以不能随意拖动大小

主 Activity 完成后如何从服务中显示 Toast?