其实这东西在今年三月份的时候就弄出来了,只是一直没有写博客的习惯,所以就一直自己在用,这是一个我自己封装好的工具类,方便实用哈,用该工具类觉得好用的亲们记得给好评。
在项目上经常要用到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();
}
}
}