我们用toast时不能设置显示的时间,而且不支持在线程中展示toast,下面我对原始的toast进行了封装,这样我们可以很方便的进行toast的使用了。

package com.kale.lib.utils;

import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
import android.view.View;
import android.widget.Toast; /**
* @author Jack Tony
* @date 2015/4/29
*/
public class EasyToast { @IntDef({Toast.LENGTH_SHORT, Toast.LENGTH_LONG})
private @interface Length {} private Toast mToast = null; private Handler mHandler = null; private int duration = 0; private int currDuration = 0; private final int DEFAULT = 2000; public EasyToast(Context context) {
currDuration = DEFAULT;
mHandler = new Handler(context.getMainLooper());
mToast = Toast.makeText(context, "", Toast.LENGTH_LONG);
} private Runnable mToastThread = new Runnable() { public void run() {
mToast.show();
mHandler.postDelayed(mToastThread, DEFAULT);// 每隔2秒显示一次
if (duration != 0) {
if (currDuration <= duration) {
currDuration += DEFAULT;
} else {
cancel();
}
}
}
}; /**
* 返回内部的toast对象。可以进行多样化的设置
*/
public Toast getToast() {
return mToast;
} /**
* 设置toast的文字
*/
public void setText(String text) {
mToast.setText(text);
} /**
* 显示toast
*
* @param duration toast显示的时间(单位:ms)
*/
public void show(int duration) {
this.duration = duration;
mHandler.post(mToastThread);
} /**
* 设置toast显示的位置
*
* @param gravity 位置,可以是Gravity.CENTER等
* @param xOffset x轴的偏移量
* @param yOffset y轴的偏移量
*/
public void setGravity(int gravity, int xOffset, int yOffset) {
mToast.setGravity(gravity, xOffset, yOffset);
} /**
* 设置toast的view
*/
public void setView(View view) {
mToast.setView(view);
} /**
* 让toast消失的方法
*/
public void cancel() {
mHandler.removeCallbacks(mToastThread);// 先把显示线程删除
mToast.cancel();// 把最后一个线程的显示效果cancel掉,就一了百了了
currDuration = DEFAULT;
} //// 封装的静态方法 ////// public static void makeText(@NonNull Context context, int msg) {
makeText(context, String.valueOf(msg));
} public static void makeText(@NonNull Context context, String msg) {
if (context != null) {
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}
} public static void makeText(@NonNull Context context, int msg, @Length int length) {
makeText(context, String.valueOf(msg), length);
} public static void makeText(@NonNull Context context, String msg, @Length int length) {
if (length == Toast.LENGTH_SHORT || length == Toast.LENGTH_LONG) {
if (context != null) {
Toast.makeText(context, msg, length).show();
}
}
} /**
* 当你在线程中使用toast时,请使用这个方法
*/
public static void makeTextInThread(@NonNull final Context context, int msg) {
makeTextInThread(context, String.valueOf(msg));
} /**
* 当你在线程中使用toast时,请使用这个方法
*/
public static void makeTextInThread(@NonNull Context context, String msg) {
makeTextInThread(context, msg, Toast.LENGTH_SHORT);
} /**
* 当你在线程中使用toast时,请使用这个方法
*/
public static void makeTextInThread(@NonNull Context context, int msg, @Length int length) {
makeTextInThread(context, String.valueOf(msg), length);
} public static void makeTextInThread(@NonNull final Context context, final String msg, @Length final int length) {
new Thread() {
@Override
public void run() {
Looper.prepare();//先移除
Toast.makeText(context, msg, length).show();
Looper.loop();// 进入loop中的循环,查看消息队列
}
}.start();
}
}

简单好用的Toast封装类——EasyToast的更多相关文章

  1. ToastUtil【简单的Toast封装类】【未自定义Toast的显示风格】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 一个简单的Toast封装类. 效果图 API = 6.0 API = 4.4.2 代码分析 实现了不管我们触发多少次Toast调用, ...

  2. ToastCustomUtil【简单的Toast封装类】【自定义Toast的显示风格】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 ToastUtil + ToastCustom结合.主要解决低版本机型上系统toast显示不好看的问题. 效果图 代码分析 在Toa ...

  3. Android开发2:事件处理及实现简单的对话框(Toast,AlertDialog,Snackbar,TextInputLayout的使用)

    前言 啦啦啦~又要和大家一起学习Android开发啦,博主心里好激动哒~ 在上篇博文中,我们通过线性布局和基础组件的使用,完成了一个简单的学生课外体育积分电子认证系统的界面,本篇博文,将和大家一起熟悉 ...

  4. 为简单而努力:Android封装类详解

    一.简单说明 1, IntentService IntentService继承自Service,并在其内部创建了工作线程,用来处理耗时操作,其中onHandleIntent方法就是在子线程执行的,我们 ...

  5. Java秒杀简单设计三:数据封装类

    上一篇https://www.cnblogs.com/taiguyiba/p/9828984.html 整合了数据库表和Dao层代码 这一篇继续设计数据封装类: 涉及到获取秒杀地址,查询,返回秒杀结果 ...

  6. HttpUtil 【判断网络连接的封装类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 该封装类主要包括以下功能: 判断是否有网络连接.判断是否有可用的网络连接: 判断是否是3G网络.判断mobile网络是否可用: 判断 ...

  7. 彻底理解Toast原理和解决小米MIUI系统上没法弹Toast的问题

    1.Toast的基本使用 Toast在Android中属于系统消息通知,用来提示用户完成了什么操作.或者给用户一个必要的提醒.Toast的官方定义是这样的: A toast provides simp ...

  8. Android的Toast介绍-android学习之旅(三十六)

    Toast简单介绍 Toast是一个很方便的消息提示框.会在桌面显示一个短暂的消息提示.有两个特点: 1.消息不会获得焦点. 2.过一段时间会自己主动消失. Toast的生成步骤 1.调用构造器或者静 ...

  9. Android进阶(十六)子线程调用Toast报Can't create handler inside thread that has not called Looper.prepare() 错误

    原子线程调用Toast报Can't create handler inside thread that has not called Looper.prepare() 错误 今天用子线程调Toast报 ...

随机推荐

  1. 阿里云ubuntu环境笔记

    安装jdk8 1.下载JDK 从官网下载jdk8 jdk-8u5-linux-x64.tar.gz 2.解压 $ tar -zxvf jdk-8u5-linux-x64.tar.gz 解压出来是一个j ...

  2. C#的回调被C++调用

    __stdcall 要加这个 extern "C" __declspec(dllexport) 要用这样的东东 定义 extern "C" __declspec ...

  3. C# 通过WebService方式 IIS发布网站 上传文件到服务器

    应用场景:要将本地的文件 上传到服务器的虚拟机上 网络环境:公司局域网(如下图中第二种) 开发环境:VS2010 服务器环境:WinServer2008    虚拟机环境:WinServer2008 ...

  4. codeforces MUH and Cube Walls

    题意:给定两个序列a ,b, 如果在a中存在一段连续的序列使得 a[i]-b[0]==k, a[i+1]-b[1]==k.... a[i+n-1]-b[n-1]==k 就说b串在a串中出现过!最后输出 ...

  5. Yii中 RBAC(基于角色的访问控制权限)表结构原理分析

    这里有几个概念很重要,我简单用大白话说一下; 权限:就是指用户是否可以执行哪些操作. 如:小张可以发帖.回帖.浏览,小红只能回帖.浏览 角色:就是上面说的一组操作的集合. 如:高级会员有发帖.回帖.删 ...

  6. 自动化基础普及之selenium是啥?

    Selenium 并不像QTP那样让人一下子就明白是什么?它是编程人员的最爱,但它却对测试新手产生了很大的阻碍. Selenium 是啥? Selenium RC是啥? Webdriver 又是啥? ...

  7. Win10 + VS2015 下编译 Qt5.6.0

    近期由于另外一个项目需要用 vs2015 ,于是把 Qt 也升级到了 5.6.0 .由于项目需要兼容 Windows xp ,所以需要自己编译 Qt .这里大致整理一下编译的过程. 安装 Active ...

  8. 【HTML5】Canvas 实现放大镜效果

    图片放大镜 效果 在线演示    源码 原理 首先选择图片的一块区域,然后将这块区域放大,然后再绘制到原先的图片上,保证两块区域的中心点一致, 如下图所示: 初始化 <canvas id=&qu ...

  9. ASP.NET WebForm与MVC优缺点

    发表于我的个人网站中,请点击阅读!

  10. 【Spark】---- Spark 硬件配置

    存储系统 Spark任务需要从一些外部的存储系统加载数据(如:HDFS 或者 HBase),重要的是存储系统要接近Spark系统,我们有如下推荐:   (1)如果可能,运行Spark在相同的HDFS节 ...