您的位置:首页 > 移动开发 > Android开发

[Android]Toast的工具类(- -!)可啪的重复显示Toast

2016-05-04 21:03 513 查看
toast本来就是提示用户信息用的,首先分析出当前面临的问题:

1.想显示多姿多彩的Toast

2.toast重复显示的问题及解决办法。

首先解决第一个问题:

Toast可以设置显示位置,通过.setGravity(Gravity.CENTER, 0, 0);即可解决问题

toast可以设置显示的时长.setDuration(duration);不要期望使用数字代表时长了,完全无效的,只能用Toast.LENGTH_SHORT 与 Toast.LENGTH_LONG,那我就想手动设置时间怎么办…,好吧~~这是一个问题。

可能有同学说了,我想显示图片可以么,答案是完全可以的,你可以放一个你自己的view进行,至于放什么稀奇古怪的东东,那就随你了,然后就引出了第一种不重复显示的方法了,每次有新的就让旧的toast调用cancel()方法,然后在展示新的,这样每次都可以加载一个新的view了

public static void buildToast(Context context,String msg,int duration,View mLayout){

if(mSpecialToast == null){
mSpecialToast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
}else{
mSpecialToast.cancel();
mSpecialToast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
mSpecialToast.setGravity(Gravity.CENTER, 0, 0);
mSpecialToast.setDuration(duration);
}

//将自定义View覆盖Toast的View
mSpecialToast.setView(mLayout);

mSpecialToast.show();
}


我们知道toast存在一个cancel()的方法,通过cancel,我们可以将Toast消去,那多次弹框的时候重复cancel()和show()调用效率有些低唉,那可以使用setText(Str),将想替换的文字替换即可,然后加一个延迟的限制,防止多次调用后出现很久再消失的情况,这就是第二种方法,通过延迟重置的方法替换toast内容。

//延迟的runnable
private static Runnable r = new Runnable() {
public void run() {
lastMsg = null;
mTextToast.cancel();
}
};

public static void showTextToast(Context mContext, String text, int duration) {
// 如果为null或者 本次与上次的文字相同,将不进行再次展示;否则移除上次展示的文字,展示最新的文字
if (TextUtils.isEmpty(text) || TextUtils.equals(text, lastMsg)) {
return;
}
lastMsg = text;
if (mHandler == null) {
mHandler = new Handler();
}
mHandler.removeCallbacks(r);
if (mTextToast != null) {
mTextToast.setText(text);
} else {
mTextToast = Toast.makeText(mContext, text, Toast.LENGTH_SHORT);
}
mHandler.postDelayed(r, duration);
mTextToast.show();
}


来自博主bluewindtalker

其实替换view的方法,也可以通过第二种runnable延迟处理的方法进行操作,这样可以自定义显示的toast的布局了,每次通过setView()的方法替换不同的显示界面,然后采用第二种延迟的方法即可,但是,有一很重要的点,setView之后就不要setText了,因为view被替换了,所以建议写出两个静态常量的Toast对象进行处理,详细代码就不写出了,童鞋们可以自己实现下·~~喵
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android toast