TextToast -- 自定义Toast源码
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; /**
* Created by John on 2016/4/15.
* 支持设置显示时长,背景,及对齐方式,文字颜色等功能的Toast
*/
public class TextToast { /** 默认显示的时间 ms */
private static final int DURATION = 3000; /** top或Bottom对齐时,默认y偏移的值*/
private static final int DY = (int) dp2px(40); private TextView mTextView;
private final WindowManager mWM;
private final Handler mHanlder = new Handler();
private final WindowManager.LayoutParams mParams;
private int mDuration = DURATION; private TextToast(Context context) { int dp4 = (int) dp2px(4);
int dp2 = (int) dp2px(2); 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); 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; mWM = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
} /** 创建一个Toast对象*/
public static TextToast makeText(Context context, CharSequence s) {
TextToast toast = new TextToast(context);
toast.setText(s);
return toast;
} public TextToast setText(CharSequence s) {
mTextView.setText(s);
return this;
} public TextToast setBackgroundResource(int resId) {
mTextView.setBackgroundResource(resId);
return this;
} public TextToast setBackgroundColor(int color) {
mTextView.setBackgroundColor(color);
return this;
} public TextToast setCenter() {
mParams.gravity = Gravity.CENTER;
mParams.y = 0;
return this;
} public TextToast setTop() {
mParams.gravity = Gravity.TOP;
mParams.y = DY;
return this;
} public TextToast setBottom() {
mParams.gravity = Gravity.BOTTOM;
mParams.y = DY;
return this;
} public TextToast setGravity(int gravity, int x, int y) {
mParams.gravity = gravity;
mParams.x = x;
mParams.y = y;
return this;
} public TextToast setTextColor(int color) {
mTextView.setTextColor(color);
return this;
} public TextToast setDuration(int duration) {
mDuration = duration;
return this;
} public void show() {
mHanlder.removeCallbacks(mHide);
mHanlder.post(mShow);
mHanlder.postDelayed(mHide, mDuration);
} public void cancel() {
mHanlder.removeCallbacks(mHide);
if (mTextView != null && mTextView.getParent() != null)
mWM.removeViewImmediate(mTextView);
} private static float dp2px(float dp) {
DisplayMetrics dm = new DisplayMetrics();
dm.setToDefaults();
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, dm);
} private final Runnable mShow = new Runnable() {
@Override
public void run() {
if (mTextView.getParent() != null)
mWM.removeView(mTextView);
mWM.addView(mTextView, mParams);
}
}; private Runnable mHide = new Runnable() {
@Override
public void run() {
cancel();
}
};
}
TextToast -- 自定义Toast源码的更多相关文章
- Android必学-异步加载+Android自定义View源码【申明:来源于网络】
Android必学-异步加载+Android自定义View源码[申明:来源于网络] 异步加载地址:http://download.csdn.net/detail/u013792369/8867609 ...
- Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)
Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性) 前言:由于前段时间忙于写接口,在接口中需要做很多的参数校验,本着简洁.高效的原则,便写了这个小工具供自己使用(内容 ...
- spring security 授权方式(自定义)及源码跟踪
spring security 授权方式(自定义)及源码跟踪 这节我们来看看spring security的几种授权方式,及简要的源码跟踪.在初步接触spring security时,为了实现它的 ...
- 基于zuul实现自定义路由源码分析
ZuulFilter定义 通过继承ZuulFilter我们可以定义一个新的过滤器,如下 public class IpAddressFilter extends ZuulFilter { @Autow ...
- select2插件改造之设置自定义选项 源码
改造特性: 适应业务需要,选项里面包含“其他”其它”,可以点击填写并设置自定义选项 效果图: 具体代码不做阐述,如有类似需求,请私信.主要源码: /* Copyright 2012 Igor Vayn ...
- android自定义SlideMenu源码详解之最简单侧滑实现
实现原理:在一个Activity的布局中需要有两部分,一个是菜单(menu)的布局,一个是内容(content)的布局.两个布局横向排列,菜单布局在左,内容布局在右.初始化的时候将菜单布局向左偏移,以 ...
- Android带图片的Toast(自定义Toast)
使用Android默认的Toast Toast简介: Toast是一个简单的消息显示框,能够短暂的出现在屏幕的某个位置,显示提示消息. 默认的位置是屏幕的下方正中,一般Toast的使用如下: Toas ...
- android135 360 来电去电归属地显示,自定义toast,
点击会开启服务. sivAddress.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) ...
- jQuery1.9.1源码分析--数据缓存Data模块
jQuery1.9.1源码分析--数据缓存Data模块 阅读目录 jQuery API中Data的基本使用方法介绍 jQuery.acceptData(elem)源码分析 jQuery.data(el ...
随机推荐
- String和StringBuffer以及StringBuilder的区别
今天在读<java编程思想>的时间,在看到String和StringBuffer以及StringBuffer这三个类的时间,做一个随笔小结,为自己的面试做好准备! 一:String,Str ...
- Dreamweaver CS5网页制作教程
说到Dreamweaver这个网页制作神器,不由得想起在学校里上的选修课,那是的我们只知道 table 布局,只知道构建网站最方便的是使用“所见即所得”编辑器.回忆一下,真的是很怀旧啊! 虽说咱现在大 ...
- ES6 之 let / const
本博文配合 阮一峰 <ES6 标准入门(第3版)>一书进行简要概述 ES6 中的 let 与 const. 历史遗留问题 由于 JS ES3语法中的 var 提升变量.没有块级作用域,因而 ...
- HTML/JSP中一些单书名号标签的用途<%-- --%><!-- --><%@ %><%! %><% %><%= %>
注释 <%-- --%>是(JSP)隐式注释,不会在页面显示的注释 <!-- -->是(Html)显示注释,会在JSP页面显示 关于注释还有单行隐式注释//和多行隐式注释/* ...
- 【Linux 运维】Centos7初始化网络配置
设置网络 (1)动态获取一个IP地址 #dhclient 系统自动自动获取一个IP地址#ip addr 查看获取的ip地址(2)查看网关,子网掩码 虚拟机编辑>虚拟 ...
- Fluent Python: Classmethod vs Staticmethod
Fluent Python一书9.4节比较了 Classmethod 和 Staticmethod 两个装饰器的区别: 给出的结论是一个非常有用(Classmethod), 一个不太有用(Static ...
- 一次大量TIME_WAIT和Recv-Q 堵塞问题排查思路
记录一下周末出现问题~ 仅自己摘记不做任何参考. 第一天故障: 现象: 公司销售群和售后群炸了,说老后台(1.0版本)崩溃了,因为还有部门的业务没来得及迁移到新后台,我当时正在打农药哈哈~ 后 ...
- Rightmost Digit(最后一位数字)
Description Given a positive integer N, you should output the most right digit of N^N. Input The ...
- Spark Streaming - DStream
1 Overview Spark Streaming is an extension of the core Spark API that enables scalable, high-through ...
- iOS-修改导航栏文字字体和颜色
//修改导航栏文字字体和颜色 nav.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName:[RGBColor co ...