1. import android.content.Context;
    import android.graphics.Color;
    import android.graphics.PixelFormat;
    import android.os.Handler;
    import android.util.DisplayMetrics;
    import android.util.TypedValue;
    import android.view.Gravity;
    import android.view.WindowManager;
    import android.widget.TextView;
  2.  
  3. /**
    * Created by John on 2016/4/15.
    * 支持设置显示时长,背景,及对齐方式,文字颜色等功能的Toast
    */
    public class TextToast {
  4.  
  5. /** 默认显示的时间 ms */
    private static final int DURATION = 3000;
  6.  
  7. /** top或Bottom对齐时,默认y偏移的值*/
    private static final int DY = (int) dp2px(40);
  8.  
  9. private TextView mTextView;
    private final WindowManager mWM;
    private final Handler mHanlder = new Handler();
    private final WindowManager.LayoutParams mParams;
    private int mDuration = DURATION;
  10.  
  11. private TextToast(Context context) {
  12.  
  13. int dp4 = (int) dp2px(4);
    int dp2 = (int) dp2px(2);
  14.  
  15. mTextView = new TextView(context);
    mTextView.setTextColor(Color.argb(0xff, 0x00, 0x00, 0x00));
    mTextView.setBackgroundColor(Color.argb(0x88, 0xff, 0xff, 0xff));
    mTextView.setPadding(dp4, dp2, dp4, dp2);
    mTextView.setGravity(Gravity.CENTER_HORIZONTAL);
  16.  
  17. mParams = new WindowManager.LayoutParams();
    mParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
    mParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
    mParams.format = PixelFormat.TRANSLUCENT;
    mParams.type = WindowManager.LayoutParams.TYPE_TOAST;
    mParams.setTitle("Toast");
    mParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams
    .FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
  18.  
  19. mWM = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
    }
  20.  
  21. /** 创建一个Toast对象*/
    public static TextToast makeText(Context context, CharSequence s) {
    TextToast toast = new TextToast(context);
    toast.setText(s);
    return toast;
    }
  22.  
  23. public TextToast setText(CharSequence s) {
    mTextView.setText(s);
    return this;
    }
  24.  
  25. public TextToast setBackgroundResource(int resId) {
    mTextView.setBackgroundResource(resId);
    return this;
    }
  26.  
  27. public TextToast setBackgroundColor(int color) {
    mTextView.setBackgroundColor(color);
    return this;
    }
  28.  
  29. public TextToast setCenter() {
    mParams.gravity = Gravity.CENTER;
    mParams.y = 0;
    return this;
    }
  30.  
  31. public TextToast setTop() {
    mParams.gravity = Gravity.TOP;
    mParams.y = DY;
    return this;
    }
  32.  
  33. public TextToast setBottom() {
    mParams.gravity = Gravity.BOTTOM;
    mParams.y = DY;
    return this;
    }
  34.  
  35. public TextToast setGravity(int gravity, int x, int y) {
    mParams.gravity = gravity;
    mParams.x = x;
    mParams.y = y;
    return this;
    }
  36.  
  37. public TextToast setTextColor(int color) {
    mTextView.setTextColor(color);
    return this;
    }
  38.  
  39. public TextToast setDuration(int duration) {
    mDuration = duration;
    return this;
    }
  40.  
  41. public void show() {
    mHanlder.removeCallbacks(mHide);
    mHanlder.post(mShow);
    mHanlder.postDelayed(mHide, mDuration);
    }
  42.  
  43. public void cancel() {
    mHanlder.removeCallbacks(mHide);
    if (mTextView != null && mTextView.getParent() != null)
    mWM.removeViewImmediate(mTextView);
    }
  44.  
  45. private static float dp2px(float dp) {
    DisplayMetrics dm = new DisplayMetrics();
    dm.setToDefaults();
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, dm);
    }
  46.  
  47. private final Runnable mShow = new Runnable() {
    @Override
    public void run() {
    if (mTextView.getParent() != null)
    mWM.removeView(mTextView);
    mWM.addView(mTextView, mParams);
    }
    };
  48.  
  49. private Runnable mHide = new Runnable() {
    @Override
    public void run() {
    cancel();
    }
    };
    }

TextToast -- 自定义Toast源码的更多相关文章

  1. Android必学-异步加载+Android自定义View源码【申明:来源于网络】

    Android必学-异步加载+Android自定义View源码[申明:来源于网络] 异步加载地址:http://download.csdn.net/detail/u013792369/8867609 ...

  2. Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)

    Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性) 前言:由于前段时间忙于写接口,在接口中需要做很多的参数校验,本着简洁.高效的原则,便写了这个小工具供自己使用(内容 ...

  3. spring security 授权方式(自定义)及源码跟踪

    spring security 授权方式(自定义)及源码跟踪 ​ 这节我们来看看spring security的几种授权方式,及简要的源码跟踪.在初步接触spring security时,为了实现它的 ...

  4. 基于zuul实现自定义路由源码分析

    ZuulFilter定义 通过继承ZuulFilter我们可以定义一个新的过滤器,如下 public class IpAddressFilter extends ZuulFilter { @Autow ...

  5. select2插件改造之设置自定义选项 源码

    改造特性: 适应业务需要,选项里面包含“其他”其它”,可以点击填写并设置自定义选项 效果图: 具体代码不做阐述,如有类似需求,请私信.主要源码: /* Copyright 2012 Igor Vayn ...

  6. android自定义SlideMenu源码详解之最简单侧滑实现

    实现原理:在一个Activity的布局中需要有两部分,一个是菜单(menu)的布局,一个是内容(content)的布局.两个布局横向排列,菜单布局在左,内容布局在右.初始化的时候将菜单布局向左偏移,以 ...

  7. Android带图片的Toast(自定义Toast)

    使用Android默认的Toast Toast简介: Toast是一个简单的消息显示框,能够短暂的出现在屏幕的某个位置,显示提示消息. 默认的位置是屏幕的下方正中,一般Toast的使用如下: Toas ...

  8. android135 360 来电去电归属地显示,自定义toast,

    点击会开启服务. sivAddress.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) ...

  9. jQuery1.9.1源码分析--数据缓存Data模块

    jQuery1.9.1源码分析--数据缓存Data模块 阅读目录 jQuery API中Data的基本使用方法介绍 jQuery.acceptData(elem)源码分析 jQuery.data(el ...

随机推荐

  1. 2018牛客多校第二场a题

    一个人可以走一步或者跳x步,但不能连着跳,问到这个区间里有几种走法 考虑两种状态  对于这一点,我可以走过来,前面是怎么样的我不用管,也可以跳过来但是,跳过来必须保证前一步是走的 dp[i][0]表示 ...

  2. Linux服务架设篇--arp命令

    ARP,地址解析协议.在以太局域网中,主机之间交换数据帧时,是通过MAC地址进行的.因此,当以太网的一台主机向另一台IP地址的主机发送数据包时,它需要知道目的IP地址所对应的MAC地址,才能把这个IP ...

  3. javaScript中两个等于号和三个等于号之间的区别

    一言以蔽之:==先转换类型再比较,===先判断类型,如果不是同一类型直接为false. ===表示恒等于,比较的两边要绝对的相同 alert(0 == ""); // trueal ...

  4. codeforces 303C. Minimum Modular(数论+暴力+剪枝+贪心)

    You have been given n distinct integers a1, a2, ..., an. You can remove at most k of them. Find the ...

  5. fragment的介绍与使用

    稍稍摘录一段Fragment.java中的说明文档. /** * A Fragment is a piece of an application's user interface or behavio ...

  6. Thunder团队第五周 - Scrum会议4

    Scrum会议4 小组名称:Thunder 项目名称:i阅app Scrum Master:李传康 工作照片: 邹双黛同学在拍照,所以不在照片内. 参会成员: 王航:http://www.cnblog ...

  7. Python 零碎信息-基础 01

    1. """ 可以插入多行文字. print """ abC 123' 456''" #单引号, 双引号, 也没有关系 " ...

  8. Swift-可选值(Optional)讲解

    前提:Swift中有规定:对象中的任何属性在创建时,都必须要有明确的初始化值 1.定义可选类型 方式一:常规方式(不常用) var name : Optional<String> = ni ...

  9. SpringData——HelloWorld

    1.背景 最开始了解SpringData的时候,以为他不就是ORM的一种实现方式嘛,还能有什么新的东西.从hibernate到ibatis.mybatis,也许他只不过是spring想整合一个更方便的 ...

  10. 【Linux】CentOS安装redis

    CENTOS7下安装REDIS 安装完成之后使用:redis-cli命令连接,如图: 提示:/var/run/redis_6379.pid exists, process is already run ...