Android编程实现Toast只显示最后一条的方法
作者:QQxiaoqiang1573 发布时间:2023-12-13 11:54:49
标签:Android,Toast
本文实例讲述了Android编程实现Toast只显示最后一条的方法。分享给大家供大家参考,具体如下:
在做Android开发中,时不时的可能会用到Toast,但用Toast的时候,连续使用会存在一个问题,就是一条条显示Toast。而不是直接显示最后一条。因此,根据此需求,现在写了ToastUtil这个类,该类中有三个方法供选择。
ToastUtil.Java
import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.Gravity;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast;
public class ToastUtil {
//方法一
private static Handler mHandler = new Handler(Looper.getMainLooper());
private static Toast mToast = null;
private static Object synObject = new Object();
public static void showToastByThread(Context context, String msg){
showToastByThread(context, msg, Toast.LENGTH_SHORT);
}
public static void showToastByThread(Context context, int msg){
showToastByThread(context, context.getText(msg), Toast.LENGTH_SHORT);
}
public static void showToastByThread(final Context context, final CharSequence msg, final int length){
new Thread(new Runnable() {
@Override
public void run() {
mHandler.post(new Runnable() {
@Override
public void run() {
synchronized (synObject) {
if (mToast != null){
mToast.setText(msg);
mToast.setDuration(length);
}else{
mToast = Toast.makeText(context, msg, length);
}
mToast.show();
}
}
});
}
}).start();
}
//方法二:注意此方法不能再子线程中使用
private static long oneTime;
private static long twoTime;
private static String oldMsg;
public static void showToastByTime(Context context, String msg){
if (mToast == null) {
mToast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
mToast.show();
oneTime = System.currentTimeMillis();
} else {
twoTime = System.currentTimeMillis();
if (msg.equals(oldMsg)){
if (twoTime-oneTime > Toast.LENGTH_SHORT){
mToast.show();
}
} else {
oldMsg = msg;
mToast.setText(msg);
mToast.show();
}
}
oneTime = twoTime;
}
public static void showToastByTime(Context context, int msg){
showToastByTime(context, context.getString(msg));
}
//方法三
public static TextView mTextView;
public static WindowManager mWindowManager = null;
private static Handler mPriHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
cancelToast();
}
};
public static void showToastByWindow(Context context, String msg){
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
if (mTextView == null){
mTextView = new TextView(context);
}
mTextView.setText(msg);
mTextView.setTextSize(20);
mTextView.setPadding(0, 0, 0, 30);
if (mTextView.getParent() == null){
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.gravity= Gravity.BOTTOM;
params.alpha = 0.65f;
params.x = 0;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
params.format = PixelFormat.TRANSLUCENT;
params.windowAnimations = 0;
mWindowManager.addView(mTextView, params);
mPriHandler.sendEmptyMessageDelayed(101, 1000);
} else {
mTextView.setText(msg);
mPriHandler.removeMessages(101);
mPriHandler.sendEmptyMessageDelayed(101, 1000);
}
}
public static void cancelToast(){
if (mTextView != null && mTextView.getParent() != null){
mWindowManager.removeView(mTextView);
}
}
}
希望本文所述对大家Android程序设计有所帮助。
来源:http://blog.csdn.net/qqxiaoqiang1573/article/details/50483517


猜你喜欢
- IDEA maven项目中刷新依赖的方法IDEA maven项目中刷新依赖分为自动刷新 和 手动刷新 两种!自动刷新File-Setting
- java中javaBean与Bean的深入理解JavaBean 是Java中的一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点
- 什么是fescar?关于fescar的详细介绍,请参阅fescar wiki。传统的2PC提交协议,会持有一个全局性的锁,所有局部事务预提交
- spring boot是个好东西,可以不用容器直接在main方法中启动,而且无需配置文件,方便快速搭建环境。可是当我们要同时启动2个spri
- 本文实例为大家分享了JavaWeb实现简单文件上传的具体代码,供大家参考,具体内容如下1.概述通常浏览器上传的所有参数,我们可以通过requ
- 本文实例讲述了C#使用oledb操作excel文件的方法。分享给大家供大家参考。具体分析如下:不管什么编程语言都会提供操作Excel文件的方
- 本文实例讲述了C# Socket网络编程技巧。分享给大家供大家参考。具体分析如下:客户端要连接服务器:首先要知道服务器的IP地址。而服务器里
- 一、目的本篇文章的目的是记录本人使用flutter加载与调用第三方aar包。二、背景本人go后端,业余时间喜欢玩玩flutter。一直有一个
- 博主在初学注解的时候看到网上的介绍大部分都是直接介绍用法或者功能,没有实际的应用场景,篇幅又很长导致学习的时候难以理解其意图,而且学完就忘Q
- 本文实例为大家分享了java贪吃蛇游戏展示的具体代码,供大家参考,具体内容如下1、采用MVC(model、view、control)框架模式
- 背景:最近需要用到人脸识别,但又不花钱使用现有的第三方人脸识别接口,为此使用opencv结合java进行人脸识别(ps:opencv是开源的
- 最近准备整理一套关于UI效果的文章,算是对这段时间的一个总结,主要讲Android开发中的UI效果设计模块。初步分为一下几个篇幅:Andro
- 定时器问题定时器属于基本的基础组件,不管是用户空间的程序开发,还是内核空间的程序开发,很多时候都需要有定时器作为基础组件的支持。一个定时器的
- 本文实例为大家分享了Android实现记事本功能的具体代码,供大家参考,具体内容如下MainActivity.java代码:package
- 这篇文章主要讲述服务追踪组件zipkin,Spring Cloud Sleuth集成了zipkin组件。一、简介Add sleuth to
- 使用TransitionDrawable渐变切换多张图片,供大家参考,具体内容如下1、定义变量private int change = 0;
- java 基础之JavaBean属性命名规范问题JavaBean属性名要求:前两个字母要么都大写,要么都小写下面我们来找找如果不遵循这个规范
- 本文实例讲述了C#写入对象或集合类型数据到xml文件的方法。分享给大家供大家参考。具体实现方法如下:public static string
- 之前花了几天去研究怎么使用netty做一个网关服务器,虽然最后还是没能用上我做的网关,但是呢netty是会用了,总结一下netty和spri
- 从网上收集后自己写的一个方法;1.首先是一个根据分辨率压缩的类,首先对图片进行一次压缩 /** * 根据分辨率压缩图