文章地址:http://blog.csdn.net/wudongjiang333/article/details/79167059
##Android 动态控制Toast的显示与隐藏
我们知道,Toast信息会在显示一段时间后自动隐藏,因为它有一个Toast队列,系统会依次从这个队列中取出一个Toast。
在最近的开发中,我遇到一个问题,在设置某项功能的过程中,显示Toast框信息,直到设置成功后,才能隐藏该Toast框!
而Toast只提供了Toast.LENGTH_SHORT和Toast.LENGTH_LONG两个选项,那我们该怎么做呢?
查看Toast提供的方法发现**cancel()**用于隐藏当前的Toast,结合定时器,很容易实现我想要的功能!
##关键代码:
public class CustomToast {
private static final String TAG = "CustomToast";
private Context mContext;
private Toast mToast;
private final int ALWAYS_SHOW = 0;
private boolean mIsNeedHide = false;
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case ALWAYS_SHOW:
if (mToast != null) {
if (!mIsNeedHide) {
Log.d(TAG,"toast show");
mToast.show();
mHandler.sendEmptyMessageDelayed(ALWAYS_SHOW,10);
} else {
Log.d(TAG,"toast hide");
mToast.cancel();
mHandler.removeMessages(ALWAYS_SHOW);
mIsNeedHide = false;
}
}
break;
default:
break;
}
}
};
public CustomToast(Context context){
mContext = context;
}
public void alwaysShow(final String text){
//防止在子线程中弹Toast导致应用Crash
CustomToastApplistion.getInstance().runUITask(new Runnable() {
@Override
public void run() {
if (mToast == null) {
mToast = Toast.makeText(CustomToastApplistion.getInstance(), text, Toast.LENGTH_SHORT);
} else {
mToast.setText(text);
}
mHandler.sendEmptyMessageDelayed(ALWAYS_SHOW,10);
}
});
}
/**
* 隐藏Toast框
*/
public void hide(){
this.mIsNeedHide = true;
}
}
##完整Demo地址 代码地址