关于Android Toast
使用Toast一般会用下面这条语句:
Toast.makeText(MainActivity.this, "Hello", Toast.LENGTH_SHORT).show();
但有一个问题,如果频繁使用toast会导致其长时间显示。
这和Toast的实现原理是有关系的。
Toast在调用其show方法时,并不是立刻显示出来,而是添加到系统的一个队列中。
而在这个队列中,先添加进去的Toast先被显示出来,所以说,刚show的Toast并不会立刻显示,而是要等队列中之前被添加的Toast显示完之后才可以显示。
而这个队列中是可以保存相当多数量的Toast的,如果你一次性new出多个Toast并将它们都show了一遍,系统就会依次一个个将这些Toast全部显示一遍,时间很长,可能你应用都退了,但是Toast还在显示。
(PS:这种情况并不少见。可能你设置用户点击一次按钮显示一次Toast,谁也不能保证用户不会一直狂按这个按钮。)
这样的情况其实是很影响用户体验的。
但有解决办法。
先贴代码:
private static Toast myToast;
public static void showToast(Context context, String str) {if(myToast == null) {myToast = Toast.makeText(context, str, Toast.LENGTH_SHORT);} else {myToast.setText(str);}myToast.show();}
在new一个Toast之前先判断这个myToast是不是为NULL,如果不是NULL,就不要再去new了,以免队列中存放过多的Toast。
如果不为NULL,只是改变了myToast的显示文字,并调用show()方法。
这样就避免队列中产生大量Toast了。
另外,贴两个自定义Toast的代码:
这是一个添加了一张图片的Toast。
其实看Toast的源码就知道,Android默认的Toast的布局就是一个LinearLayout里面一个TextView。
使用:
(LinearLayout)Toast.getView();
拿到这个View并强转成LinearLayout就可以随意向其中增加或移除View了。
private static Toast myIconToast;
public static void showIconToast(Context context, String str, int resId) {if(myIconToast == null) {myIconToast = Toast.makeText(context, str, Toast.LENGTH_SHORT);myIconToast.setGravity(Gravity.CENTER, 0, 0);LinearLayout toastLinearLayout = (LinearLayout) myIconToast.getView();ImageView imageView = new ImageView(context);imageView.setImageResource(resId);toastLinearLayout.addView(imageView, 0);} else {myIconToast.setText(str);LinearLayout toastLinearLayout = (LinearLayout) myToast.getView();ImageView imageView = new ImageView(context);imageView.setImageResource(resId);toastLinearLayout.removeViewAt(0);toastLinearLayout.addView(imageView, 0);}myIconToast.show();}
第二个是一个完全自定义的Toast,布局由我们自己定义,
利用LayoutInflater拿到我们自定义的布局后,使用:
Toast.setView()
即可实现自定义布局的Toast。
private static Toast myCustomToast;
public static void showCustomToast(Activity activity, String title, String text, int resId) {LayoutInflater inflater = activity.getLayoutInflater();View layout = inflater.inflate(R.layout.custom_toast_layout, null);TextView titleView = (TextView) layout.findViewById(R.id.tvTitleToast);titleView.setText(title);ImageView imageView = (ImageView) layout.findViewById(R.id.tvImageToast);imageView.setImageResource(resId);TextView textView = (TextView) layout.findViewById(R.id.tvTextToast);textView.setText(text);if(myCustomToast == null) {myCustomToast = new Toast(activity);myCustomToast.setGravity(Gravity.RIGHT | Gravity.TOP, 300, 300);myCustomToast.setDuration(Toast.LENGTH_SHORT);myCustomToast.setView(layout);} else {myCustomToast.setView(layout);}myCustomToast.show();}
需要注意的是,这几个方法里使用的Toast都是成员变量。
关于Android Toast相关推荐
- [Android] Toast问题深度剖析(二)
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者: QQ音乐技术团队 题记 Toast 作为 Android 系统中最常用的类之一,由于其方便的api设计和简洁的交互体验,被我们所广泛采用 ...
- android toast的使用
今天,没有什么可以写的,在网上查找资料,发现toast有很多知识点,所以记录一下. Toast Toast是为了给当前视图显示一个浮动的显示块,它永远不会获得焦点.一般用于提示一些不那么引人注目,但是 ...
- 使用Kotlin的Android Toast
Android Toast is a UI widget that pops up on the screen for some time. It's very similar to a notifi ...
- Android Toast 设置到屏幕中间,自定义Toast的实现方法,及其说明
http://blog.csdn.net/wangfayinn/article/details/8065763 Android Toast用于在手机屏幕上向用户显示一条信息,一段时间后信息会自动消失. ...
- Android Toast cancel和show深入浅出实战
说到Android Toast,几乎都很熟悉吧,下面讲讲怎么实现下面几种场景: 1.连续点击一个按钮,每次都产生一个新的Toast并且调用show方法 问题:触发了toast以后,toast内容会一直 ...
- 自定义 Android toast 字体大小
让Android Toast 居中 可以设置 字体大小 Toast toast = Toast.makeText(this, "这是一个简单的自定义Toast", Toast.LE ...
- Android Toast 自定义显示时长
Android Toast 只支持两种时间 LENGTH_SHORT 2 秒,LENGTH_LONG 3.5 秒,但是有场景需要自定义显示时长就会有问题,所以需要自定义实现,下边是自定义的类,通过定时 ...
- robotframework + appium 获取android toast
android toast 获取主要方式是在出现toast的时候查找元素:xpath=//*[contains(@text,'记同步')] ,该xpath 表示为toast信息含有 "记 ...
- qt自定义控件-模拟Android toast提示窗口
一.前言 好久没写博客了,最近一直写材料,很难受,在家做点小东西,正好遇到了想做的效果,在桌面程序实现Android的toast效果 二.环境 目标机linux,测试机window10 qt5.7 本 ...
- Android Toast类
1. 默认创建 Toast是一种简易的消息提示框,toast提示框不能被用户点击,会根据用户设置的显示时间后自动消失. Toast静态方法makeText(),生成Toast实例,并调用show()方 ...
最新文章
- FaceShifter:一秒换脸的人脸交换模型
- JAVA 算法练习(二)
- 最好的浏览器排行榜_PG是最好的数据库;TiDB 4.0前瞻;SequoiaDB高可用原理;20c DG新特性... 数据库周刊第18期...
- html 查询表单,如何让我的HTML表单查询适用于所有表单元素?
- javascript乘法和加法_Web前端:JavaScript中的NaN是什么?
- modbus注意几点
- Python 数据分析三剑客之 Matplotlib(一):初识 Matplotlib 与其 matplotibrc 配置文件
- 4.大数据架构详解:从数据获取到深度学习 --- 数据获取
- 阶段3 2.Spring_08.面向切面编程 AOP_6 四种常用通知类型
- 超实用的XRD数据定性分析方法,三分钟上手,科研小白变大神!
- 一个简单的HTML网页 故宫学生网页设计作品 dreamweaver作业静态HTML网页设计模板 旅游景点网页作业制作
- 计算机考研评分标准,考研复试评分标准来啦!
- 容器高度或者宽度的获取方式
- 笔记工具:幕布 简要使用教程
- 王川:小米盒子的产品观
- 【原创】MATLAB汽车制动防抱死模型ABS模型
- [整站源码]thinkphp古筝古琴书画培训类网站模板+前后端源码
- js自定义双击事件(可更改双击触发间隔,解决单击双击事件冲突)
- 互联网女皇2013年趋势报告:移动行业仍处早期
- 最佳编程笔记本_2020年如何选择最佳笔记本电脑进行编程?
热门文章
- 【老沙讲坛】系列之非技术面试题汇总目录
- matlab symadd,信号调理器设计—大二暑期信号分析实习报告精选多篇
- make clean和make clobber区别
- 使用nginx 同一端口根据不同域名转发到不同端口
- 5红5绿6蓝穿手链c语言,礼仪习题库(含答案)
- proteus 上拉电阻
- java入门第二季--面向对象实现人类说话,中国人说汉语,美国人说英语
- Linux中UID, GID, EUID, EGID,SUID、SGID讲解
- python战舰世界_当下三国杀高玩口中的收益论是否过时/错误,若是,如何正确从理论层面评价武将的强弱 若否 为何?...
- 快手国际版Kwai测试海外电商直播,社交App的尽头是直播电商?