自定义Toast实现多次触发只显示一次toast使用改良
来源:互联网 发布:程序员对笔记本尺寸 编辑:程序博客网 时间:2024/05/25 01:34
使用场景描述
当我们处于某个场景,例如一个按钮可以触发toast的显示,当你在多次点击按钮时,会多次触发toast的显示。而调用android原生的toast的makeText的方式所生产的toast是被加到一个队列里面,然后依次执行。这样就会出现多次点击按钮触发的toast一直会按队列出现在界面上,而且即使退出了当前界面也会一直出现在手机上,而且无法手动取消,这时的用户体验变得非常的差。这时就可以使用自定义样式的toast。
自定义toast的好处
1.多次触发也只显示一个toast,只是把toast的内容替换成最新一次触发需要显示的内容。
2.可以手动取消toast的显示(不过这个取消还是会带有一点延迟效果,不是马上就消失,而是渐渐的消失,该功能主要是通过单例来实现,一直保持只有一个toast实例,这样在调用cancel方法时就能把toast给取消掉。)
3.可以自定义toast的样式,这样就可以做到定制的效果。
使用方法
1.将自定义toast引入你们的工程中,以下是toast的源码。
public enum CustomToast { INSTANCE;// 实现单例 private Toast mToast; private TextView mTvToast; public void showToast(Context ctx, String content) { if (mToast == null) { mToast = new Toast(ctx); mToast.setGravity(Gravity.CENTER, 0, 0);//设置toast显示的位置,这是居中 mToast.setDuration(Toast.LENGTH_SHORT);//设置toast显示的时长 View _root = LayoutInflater.from(ctx).inflate(R.layout.toast_custom_common, null);//自定义样式,自定义布局文件 mTvToast = (TextView) _root.findViewById(R.id.tvCustomToast); mToast.setView(_root);//设置自定义的view } mTvToast.setText(content);//设置文本 mToast.show();//展示toast } public void showToast(Context ctx, int stringId) { showToast(ctx, ctx.getString(stringId)); } public void cancelToast() { if (mToast != null) { mToast.cancel(); mToast = null; mTvToast = null; } }}
2.需要的一些资源文件
1)自定义样式的布局toast_custom_common,完全可以按照自己的需求进行布局,以下是案例中的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/tvCustomToast" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/toast_custom_common_bg" android:gravity="center" android:minWidth="200dp" android:padding="15dp" android:textColor="@color/colorBasicWhite" android:textSize="17sp" /></LinearLayout>
2)资源文件
<color name="colorBasicWhite">#ffffff</color><color name="colorAutoDismissToast">#88000000</color>
//@drawable/toast_custom_common_bg<shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="10dp" /> <solid android:color="@color/colorAutoDismissToast" /></shape>
3.在你对应的页面中直接使用toast即可
public class TestCustomToastActivity extends AppCompatActivity { private int count = 0; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_custom_toast); ButterKnife.bind(this); } @OnClick({R.id.btnShowToast,R.id.btnCancelToast}) public void clickEvent(View v){ switch (v.getId()){ case R.id.btnShowToast: count++; CustomToast.INSTANCE.showToast(this,getString(R.string.custom_toast_click_number,count)); break; case R.id.btnCancelToast: count = 0; CustomToast.INSTANCE.cancelToast();//可手动取消toast break; } } @Override protected void onDestroy() { super.onDestroy(); CustomToast.INSTANCE.cancelToast();//销毁页面时,取消掉toast }}
这个命题已经有人做了,今天是做个小的调整,思路和代码如下:
Activity也好Context也罢,这么做总是需要destroy个人觉得非常麻烦
所以用Application的单例会简便很多。
CustomToast.INSTANCE.showToast(MyApplication.getInstance(),content);
以后调用不用考虑是哪个Activity,统一修改也方便
阅读全文
0 0
- 自定义Toast实现多次触发只显示一次toast使用改良
- Android--Toast多次点击只显示一次
- 自定义Toast并只显示最后一次
- 自定义时间Toast(只弹一次)
- Toast只显示一次相关代码
- android多次点击button只弹一次toast
- Toast多次点击只弹一次提示信息
- Toast 多次显示问题
- Toast——多次点击只显示一次解决方案
- Toast——多次点击只显示一次解决方案
- 连续点击按钮显示Toast,只显示最后一次
- Toast 多次创建显示问题
- Toast 多次创建显示问题
- Android中自定义toast工具,解决多次弹出toast后显示时间过长
- Android自定义Toast,指定Toast信息显示的位置并使用Toast显示其他View
- 自定义显示的Toast
- 自定义toast显示
- 自定义Toast显示效果
- jquery利用attr、prop方法获取、设置input的checked属性
- 带音效的时钟,并有天气的功能,运用天气接口、农历、星期几
- key,primary key unique key的区别
- 借助Java动态反射机制 创建类
- LeetCode 52 N-Queens II
- 自定义Toast实现多次触发只显示一次toast使用改良
- mybatis trim标签用法
- lintcode(184)最大数
- 刷清橙OJ--A1034.孪生素数对
- 事务基础详解
- Ajax的错误调试
- 第3章 编程问题 3.3节 9
- Android之SharedPreferences详解
- 双卡时候获取指定的imsi码