Android 动态控制Toast的显示与隐藏

我们知道,Toast信息会在显示一段时间后自动隐藏,因为它有一个Toast队列,系统会依次从这个队列中取出一个Toast。


在最近的开发中,我遇到一个问题,在设置某项功能的过程中,显示Toast框信息,直到设置成功后,才能隐藏该Toast框!

而Toast只提供了Toast.LENGTH_SHORTToast.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地址

代码地址

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 万字长文带你了解最常用的开源 Squid 代理服务器
  3. Android封装自定义Toast
  4. 《第一行代码--Android》读书笔记之数据存储
  5. 与Android热更新方案Amigo的再次接触
  6. android Burron
  7. 关于在内部类中启动一个Android(安卓)Intent的疑惑
  8. 学习Android闹钟源代码(三)-AlarmClock类分析(part1)
  9. 给Android新手的一些学习建议

随机推荐

  1. 技术揭秘:Android究竟比iOS差在哪里?
  2. android 兼容API的检查
  3. Android(安卓)仿iphone提醒事项(一)
  4. 今日头条面试(android)
  5. Android中如何编译运行系统自带桌面Launc
  6. android支持的codec一览
  7. Android(安卓)监听键盘弹出关闭
  8. android 代码优化
  9. AIDL和远程Service调用
  10. Android的Logcat命令详解:翻译Enabling lo