自定义ToastUtil工具类,可解决快速显示Toast文本问题

其实这东西在今年三月份的时候就弄出来了,只是一直没有写博客的习惯,所以就一直自己在用,这是一个我自己封装好的工具类,方便实用哈,用该工具类觉得好用的亲们记得给好评。

在项目上经常要用到Toast显示文本信息,但是当多个Toast同时显示的时候,就会出现一种情况,就是一直在那里一个一个的弹出来显示,烦死了,然后初始的想法是想着控制Toast的显示时间,结果发现Toast只能控制两个显示时间,一个是Toast.LENGTH_LONG(3秒),一个是Toast.LENGTH_SHORT(1秒)。这可郁闷死了,无奈之下查看了Toast的源代码,然后发现了一个很关键的方法:

 

 /**
     * Close the view if it's showing, or don't show it if it isn't showing yet.
     * You do not normally have to call this.  Normally view will disappear on its own
     * after the appropriate duration.
     */
    public void cancel() {
        mTN.hide();

        try {
            getService().cancelToast(mContext.getPackageName(), mTN);
        } catch (RemoteException e) {
            // Empty
        }
    }

 

首先,我们先定义一个静态的Toast,对象是toast,使其为null

 

 

private static Toast toast = null;

 

同一个Toast的对象,调用该方法可以马上使其cancel掉,是马上消失掉,然后就可以显示出接下来一个Toast了,原理就是这样,如下方法:

/**
	 * 本人根据源代码研究出来的可以马上显示下一个Toast内容的方法
	 * 
	 * @param mContext
	 * @param charSequence
	 * @param time
	 */
	private static void makeText(Context mContext, CharSequence charSequence,
			int time) {
		// TODO Auto-generated method stub
		if (toast == null) {
			toast = Toast.makeText(mContext, charSequence, time);
			toast.show();
		} else {
			toast.cancel();
			toast = Toast.makeText(mContext, charSequence, time);
			toast.show();
		}
	}

 

当然你们有更好的方法实现也说不准,互相借鉴哈,我是觉得我这种写法简单快捷不复杂<( ̄︶ ̄)>

 

 

好吧,最后我把整个工具类给贴上来供大家直接调用哈~~~

 

 

package com.freephone.utils;

import android.content.Context;
import android.widget.Toast;

/**
 * @author Voctex
 * @param 2015-03-14
 */
public class ToastUtil {

	private static Toast toast = null;
	/**
	 * 测试用的话,就改为true给人用的话就为false
	 */
	private final static boolean isShow = true;

	/**
	 * 显示toast,默认为不显示,只给调试人员看,根据isShow来控制
	 * 
	 * @param mContext
	 * @param charSequence
	 * @param default time==Toast.LENGTH_SHORT
	 */
	public static void showS(Context mContext, CharSequence charSequence) {
		if (isShow) {
			makeText(mContext, charSequence, Toast.LENGTH_SHORT);
		}
	}

	/**
	 * 根据传进来的flag来判断是否显示Toast内容
	 * 
	 * @param mContext
	 * @param charSequence
	 * @param flag
	 *            判断是否显示Toast消息
	 * @param default time==Toast.LENGTH_SHORT
	 */
	public static void showS(Context mContext, CharSequence charSequence,
			boolean flag) {
		if (flag) {
			makeText(mContext, charSequence, Toast.LENGTH_SHORT);
		}
	}

	/**
	 * 显示toast,默认为不显示,只给调试人员看,根据isShow来控制
	 * 
	 * @param mContext
	 * @param resource
	 *            字符串资源ID
	 * @param flag
	 *            判断是否显示Toast消息
	 * @param default time==Toast.LENGTH_SHORT
	 */
	public static void showS(Context mContext, int resource) {
		if (isShow) {
			makeText(mContext, resource, Toast.LENGTH_SHORT);
		}
	}

	/**
	 * 根据传进来的flag来判断是否显示Toast内容
	 * 
	 * @param mContext
	 * @param resource
	 *            字符串资源ID
	 * @param flag
	 *            判断是否显示Toast消息
	 * @param default time==Toast.LENGTH_SHORT
	 */
	public static void showS(Context mContext, int resource, boolean flag) {
		if (flag) {
			makeText(mContext, resource, Toast.LENGTH_SHORT);
		}
	}

	/**
	 * 显示toast,默认为不显示,只给调试人员看,根据isShow来控制
	 * 
	 * @param mContext
	 * @param charSequence
	 * @param flag
	 * @param default time==Toast.LENGTH_LONG
	 */
	public static void showL(Context mContext, CharSequence charSequence) {
		if (isShow) {
			makeText(mContext, charSequence, Toast.LENGTH_LONG);
		}
	}

	/**
	 * 显示toast,默认为不显示,只给调试人员看,根据isShow来控制
	 * 
	 * @param mContext
	 * @param resource
	 *            字符串资源ID
	 * @param flag
	 * @param default time==Toast.LENGTH_LONG
	 */
	public static void showL(Context mContext, int resource) {
		if (isShow) {
			makeText(mContext, resource, Toast.LENGTH_LONG);
		}
	}

	/**
	 * 根据传进来的flag来判断是否显示Toast内容
	 * 
	 * @param mContext
	 * @param charSequence
	 * @param flag
	 * @param default time==Toast.LENGTH_LONG
	 */
	public static void showL(Context mContext, CharSequence charSequence,
			boolean flag) {
		if (flag) {
			makeText(mContext, charSequence, Toast.LENGTH_LONG);
		}
	}

	/**
	 * 根据传进来的flag来判断是否显示Toast内容
	 * 
	 * @param mContext
	 * @param resource
	 *            字符串资源ID
	 * @param flag
	 * @param default time==Toast.LENGTH_LONG
	 */
	public static void showL(Context mContext, int resource, boolean flag) {
		if (flag) {
			makeText(mContext, resource, Toast.LENGTH_LONG);
		}
	}

	/**
	 * 本人根据源代码研究出来的可以马上显示下一个Toast内容的方法
	 * 
	 * @param mContext
	 * @param charSequence
	 * @param time
	 */
	private static void makeText(Context mContext, CharSequence charSequence,
			int time) {
		// TODO Auto-generated method stub
		if (toast == null) {
			toast = Toast.makeText(mContext, charSequence, time);
			toast.show();
		} else {
			toast.cancel();
			toast = Toast.makeText(mContext, charSequence, time);
			toast.show();
		}
	}

	/**
	 * 本人根据源代码研究出来的可以马上显示下一个Toast内容的方法
	 * 
	 * @param mContext
	 * @param charSequence
	 * @param time
	 */
	private static void makeText(Context mContext, int resource, int time) {
		// TODO Auto-generated method stub
		if (toast == null) {
			toast = Toast.makeText(mContext, resource, time);
			toast.show();
		} else {
			toast.cancel();
			toast = Toast.makeText(mContext, resource, time);
			toast.show();
		}
	}
}

 

 

 

你可能感兴趣的:(Android,Implement)