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 ...
随机推荐
- 2018牛客多校第二场a题
一个人可以走一步或者跳x步,但不能连着跳,问到这个区间里有几种走法 考虑两种状态 对于这一点,我可以走过来,前面是怎么样的我不用管,也可以跳过来但是,跳过来必须保证前一步是走的 dp[i][0]表示 ...
- Linux服务架设篇--arp命令
ARP,地址解析协议.在以太局域网中,主机之间交换数据帧时,是通过MAC地址进行的.因此,当以太网的一台主机向另一台IP地址的主机发送数据包时,它需要知道目的IP地址所对应的MAC地址,才能把这个IP ...
- javaScript中两个等于号和三个等于号之间的区别
一言以蔽之:==先转换类型再比较,===先判断类型,如果不是同一类型直接为false. ===表示恒等于,比较的两边要绝对的相同 alert(0 == ""); // trueal ...
- codeforces 303C. Minimum Modular(数论+暴力+剪枝+贪心)
You have been given n distinct integers a1, a2, ..., an. You can remove at most k of them. Find the ...
- fragment的介绍与使用
稍稍摘录一段Fragment.java中的说明文档. /** * A Fragment is a piece of an application's user interface or behavio ...
- Thunder团队第五周 - Scrum会议4
Scrum会议4 小组名称:Thunder 项目名称:i阅app Scrum Master:李传康 工作照片: 邹双黛同学在拍照,所以不在照片内. 参会成员: 王航:http://www.cnblog ...
- Python 零碎信息-基础 01
1. """ 可以插入多行文字. print """ abC 123' 456''" #单引号, 双引号, 也没有关系 " ...
- Swift-可选值(Optional)讲解
前提:Swift中有规定:对象中的任何属性在创建时,都必须要有明确的初始化值 1.定义可选类型 方式一:常规方式(不常用) var name : Optional<String> = ni ...
- SpringData——HelloWorld
1.背景 最开始了解SpringData的时候,以为他不就是ORM的一种实现方式嘛,还能有什么新的东西.从hibernate到ibatis.mybatis,也许他只不过是spring想整合一个更方便的 ...
- 【Linux】CentOS安装redis
CENTOS7下安装REDIS 安装完成之后使用:redis-cli命令连接,如图: 提示:/var/run/redis_6379.pid exists, process is already run ...