Android编程实现Toast只显示最后一条的方法
时间:2022-07-28
本文章向大家介绍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相关内容感兴趣的读者可查看本站专题:《Android布局layout技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
- SliferMenu详解
- Android 深入ViewPager补间动画,实现类京东商城首页广告Banner切换效果
- android抓屏
- android 仿qq手写板涂鸦
- listview动态获取数据
- toggbutton
- android软件开发之webView.addJavascriptInterface循环渐进【一】
- android的listview item点击详解
- android之surfaceview画图
- viewgroup实现item拖动效果
- Android之ExpandableListView下拉分组的实现
- 粗略的物体碰撞预测及检测
- Regionserver频繁挂掉故障处理实践
- 【翻译】GeoJSON格式规范-RFC7946
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Array - 209. Minimum Size Subarray Sum
- Array - 334. Increasing Triplet Subsequence
- Array - 123. Best Time to Buy and Sell Stock III
- Array - 122. Best Time to Buy and Sell Stock II
- Array - 121. Best Time to Buy and Sell Stock
- Array - 220. Contains Duplicate III
- Array - 219. Contains Duplicate II
- Array - 217. Contains Duplicate
- Array - 299. Bulls and Cows
- Array - 189. Rotate Array
- Array - 277 Find the Celebrity
- Array - 80. Remove Duplicates from Sorted Array II
- Array - 508. Wiggle Sort
- Array - 376. Wiggle Subsequence
- Array - 283. Move Zeroes