Android(安卓)如何动态的控制Toast的显示与隐藏
16lz
2021-01-25
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地址
代码地址
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- 万字长文带你了解最常用的开源 Squid 代理服务器
- Android封装自定义Toast
- 《第一行代码--Android》读书笔记之数据存储
- 与Android热更新方案Amigo的再次接触
- android Burron
- 关于在内部类中启动一个Android(安卓)Intent的疑惑
- 学习Android闹钟源代码(三)-AlarmClock类分析(part1)
- 给Android新手的一些学习建议