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
0
投稿
猜你喜欢
- 据JDK5的新特性,用For循环Map,例如循环Map的Keyfor(String dataKey : paraMap.keySet())&
- 本文设计一个简单的班级管理系统,满足如下要求:1、设计学生类Student,包含学号(String型)、姓名(String型)、
- .NET 中的正则表达式是基于 Perl 5 的正则表达式。超时从 .NET Framework 4.5 开始,正则表达式支持在匹配操作中指
- 安装 Tomcat 之前请一定先安装 Java ,然后才能安装 Tomcat 。安装 Java 、环境变量 path 的设置以及 cmd 小
- 一、概述1.目标:要在Tank的move()方法做时间代理及日志代理(可以设想以后还要增加很多代理处理),且代理间的顺序可活更换2.思路:(
- 本文实例为大家分享了javafx tableview鼠标触发更新属性,供大家参考,具体内容如下public class HoverCell
- 这篇文章主要介绍了Java获取时间打印到控制台代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 目录1、简单介绍2、Lambdas和Scopes3、Lambdas与局部变量4、Lambda体与局部变量5、Lambdas和'Thi
- 前言:项目中经常会用到类似于QQ侧滑点击删除的效果,网上的开源库也很多。个人感觉SwipeLayout最好用。下面介绍怎么使用。一、首先导入
- 1.准备工作1、JDK安装2、Maven安装3、Git安装4、jenkins安装以上软件安装成功后进入jenkins进行相关配置。如果需要通
- 在上篇文章给大家介绍了Android开发之开发者头条(一)启动页实现,感兴趣的朋友可以参考下。title: 带你实现开发者头条(二) 实现左
- 功能要求: (1)比如每页显示2X2,总共2XN,每个item显示图片+文字(点击有链接)。 如果单行水平滚动,可以用Horizontals
- 前言:其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组、List等等来写出
- 近期做简单的新闻客户端界面使用到了Jsoup获取,使用起来特别方便,这也是被我一个学长称为学android网络必学的一个东西,在此也是分享一
- using System.Drawing;using System.Drawing.Drawing2D;using System.Drawi
- 前言上一篇文章中我们通过自己开发了一个负载均衡组件,实现了随机算法的负载均衡功能,如果要实现其他算法,还需要修改代码增加相应的功能。这一篇文
- // Path类 IO命名空间 静态类 不能创建对象类名.string str =@"E:\C#程序设计基础入门教程\(第十一天)
- 报错信息:java.lang.Exception: org.apache.hadoop.mapreduce.task.reduce.Shuf
- 在Java 字符终端上获取输入有三种方式:1、java.lang.System.in (目前JDK版本均支持)2、java.util.Sca
- 先给大家看下效果图:MenuPopwindow:package com.cloudeye.android.cloudeye.view;imp