Toast自定义显示时间的简单有效方法

2014年07月23日 Android 4条评论 阅读22466次

Toast自定义显示时间的简单有效方法

极乐鸟博客        

Android系统SDK中提供的Toast固然好用,但有个大的局限性就是Toast显示时间不可以根据自己的需求设置。查看SDK中Toast的源码,很多前辈使用的java的反射机制来得到控制Toast的show以及hide方法,进而实现了注入实现了自己随意设置Toast的显示以及何时消失。但我认为用java反射机制代码有些稍繁琐,下面根据TimeTask的原理,利用Timer的定时功能,实现了自定义Toast的显示时间。

下面是两个方法。


private void showMyToast(Toast toast, int cnt) {
  if (cnt < 0)
   return;
  toast.show();
  execToast(toast, cnt);
 }



private void execToast(final Toast toast, final int cnt) {
  Timer timer = new Timer();
  timer.schedule(new TimerTask() {
   @Override
   public void run() {
    showMyToast(toast, cnt - 1);
   }
  }, 2000);
 }

接下来说下使用方法。


1.自己先做出要显示的Toast对象,同时有两个注意点

  注意点1.最后不要调用show()方法,只得到Toast的对象即可

  注意点2.创建Toast对象时,设置Toast的显示时间使用Toast.LENGTH_SHORT。

2.调用showMyToast(Toast, int)

  说明下两个参数。

  第一个参数:很明显,要显示的Toast对象(在第1步已经创建出来的)

  第二个参数:要显示的次数。(设置Toast要显示的时间/2)

    例如:要想让一个Toast显示10秒,那么10秒/2=5 --->则第二个参数设置为5就可以了。


本方法的局限性也是存在的。从的参数说明中也能看出来,那就是设置的显示时间只能是整偶数秒数,其他比如5.5秒则是不适用的。继续研究下,希望能出下一个真正可随意时间的方法。



---------------------------------------------------------2016-03-21增加下面的方法--------

多谢 android developer 

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


分享本文至:

WRITTEN BY

avatar
本文标签:androidtoast
看了本文是不是觉得很赞,那就赶紧点击下面按钮分享给身边的朋友吧!

4 条评论

  1. avatar android developer

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

    注:我对该方法做了点改进,自认为更简便些。使用方法与原来基本相同,不同的是所传输的 toast的显示设置为: Toast.LENGTH_LONG;而传输的显示时间单位为毫秒,设置更加精细。

  2. avatar godaddy中文

    博主讲解很详细啊,我也试试

  3. avatar 园林假山别墅

    等下捣鼓捣鼓,欢迎回访

欢迎留言




用户登录

sitemap