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 ...
随机推荐
- Python高级编程-序列化
在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: dict1 = {'name': 'Rob', 'age': 19, 'score': 90} 可以随时修改变量,比如把age改成 ...
- /etc/fstab 文件如何填写(转)
转载自 http://hi.baidu.com/jingzhongchen/blog/item/8e6f552dcead7ce98b139952.html 看你对/etc/fstab文件了解多少? ...
- 20170413B端业务访问故障排查思路
现象: 1.全国用户电视端页面无法显示,刷不出版面. 2.后端服务无法打开,报错,504,502 显示服务器端业务故障超时. 3.其他业务也出现缓慢情况,并不严重. 排查: 1.系统服务排查,常规 ...
- Oil Deposits(DFS连通图)
Description The GeoSurvComp geologic survey company is responsible for detecting underground oil dep ...
- Thunder团队第一周 - Scrum会议3
Scrum会议3 小组名称:Thunder 项目名称:在线考试系统 Scrum Master:杨梓瑞 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李 ...
- window.open居中显示
window.open中会发现怎么打开的浏览器窗口怎么不在正中间,而且还比较随性,那不是逼死强迫症患者了,所以查了一下资料始终打开的窗口能显示在正中间,下面是js中的代码分享 // url 转向网页的 ...
- 【Linux】- 不可不知的小技巧
1.Tab键:输入文件或目录名的前几个字符,然后按TAB键,如无相重的,完整的文件名立即自动在命令行出现:如有相重的,再按一下TAB键,系统会列出当前目录下所有以这几个字符开头的名字. 在命令行下,只 ...
- monaco editor 实现自定义提示(sql为例)
monaco editor :https://www.cnblogs.com/XHappyness/p/9414177.html 这里实现自己定义的提示: .vue <template> ...
- SQL SERVER技术内幕之3 联接查询
JOIN表运算符对两个输入表进行操作.联接有三种基本类型:交叉联接.内联接和外联接.这三种联接的区别是它们采用的逻辑查询处理步骤各不相同,每种联接都有一套不同的步骤.交叉联接只有一个步骤----笛卡尔 ...
- Zookeeper实现分布式集群监控
Zookeeepr实现分布式集群监控 Zookeeper中节点有两种:临时节点和永久节点 从类型上看节点又可以分为四种节点类型:PERSIST,PERSIST_SEQUENTIAL,EPHEMERAL ...