我们用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. HTTP 错误 503.2 - Service Unavailable 正在超过 serverRuntime@appConcurrentRequestLimit 设置的值。

    HTTP 错误 503.2 - Service Unavailable 正在超过 serverRuntime@appConcurrentRequestLimit 设置的值. dudu的解决办法:htt ...

  2. DDD:使用EntityFramework的话,如果只为聚合根设计仓储,其它实体如何处理?

    背景 DDD中只有聚合根可以有仓储,仓储负责整个聚合持久化的相关生命周期,在不使用工作单元或POCO的情况下,我们可以让Order内部直接调用DAL操作OrderItem.我们也可以让Order跟踪所 ...

  3. [Python] Debugger in Pycharm

    From: http://blog.csdn.net/u013088062/article/details/50214459 From: http://blog.csdn.net/u013088062 ...

  4. CentOS6.5菜鸟之旅:安装Realtek无线网卡驱动

    一.前言 CentOS6.5不像CentOS7和Unbuntu那样自动安装好了无线网卡驱动,因此需要我们折腾一下. 二.安装前的准备工作   [a] 检查无线网卡驱动的安装情况(通过查看网络接口的安装 ...

  5. ASP.NET MVC使用jQuery无刷新上传

    昨晚网友有下载了一个jQuery无刷新上传的小功能,他尝试搬至ASP.NET MVC应用程序中去,在上传死活无效果.Insus.NET使用Teamviewer远程桌面,操作一下,果真是有问题.网友是说 ...

  6. JS Array ECMAScript5 Methods

    JavaScript 的新版本(ECMAScript 5)中,为数组新增了一些方法.这些方法包括: forEach(f [,o]): 此方法类似于for/in循环,其作用是遍历整个数组并执行函数的某些 ...

  7. 【循序渐进学Python】2. Python中的序列——列表和元组

    序列概览 在Python中有六种内建的序列:列表.元组.字符串.Unicode字符串.buffer对象和xrange对象.在这里暂时只讨论列表和元组.列表和元组的主要区别在于:列表可以修改,元组(不可 ...

  8. knockoutjs+jquery.gridgroup 实现table数据加载和行合并

    目标 使用ajax获取到json数据后,通过ko绑定到表格,然后通过jquery.gridgroup插件实现行合并,效果如下: 步骤 1.引入插件 <script src="~/Scr ...

  9. Windows 64位操作系统和32位操作系统在注册表上的有一点不一样

    Windows 64位操作系统为提供对32位应用程序的兼容,在“C:\Windows\SysWOW64”目录下保留了很多32位的工具(如CMD.exe是32位的).在Windows 64位操作系统上跑 ...

  10. Studio for WPF:定制 C1WPFChart 标记

    在本篇文章中,我们将阐述如何定制 C1WPFChart 数据点的标记. 下面分步讲解实现: 1.定制自定义样式: 1: <Window.Resources> 2: <Style x: ...