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 ...
随机推荐
- EasyUI学习心得
因为要修改十几年前的一个项目界面,打9月份开始学习EasyUI,很多事情都要自己试过才知道,小问题会浪费很多时间.所以,就在此记录一下,随时更新. 一.引号 EasyUI的自定义关键字的识别,API文 ...
- gitolite 丢失管理密钥/访问权限 解决办法
登录到服务器. 使用完整路径克隆管理员仓库: git clone $HOME/repositories/gitolite-admin.git temp cd gitolite-admin/conf v ...
- HADOOP docker(二):HDFS 高可用原理
1.环境简述2.QJM HA简述2.1为什么要做HDFS HA?2.2 HDFS HA的方式2.2 HSFS HA的结构2.3 机器要求3.部署HDFS HA3.1 详细配置3.2 部署HDF ...
- POJ 1679 The Unique MST(最小生成树)
Description Given a connected undirected graph, tell if its minimum spanning tree is unique. Definit ...
- 浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(转载)
转载来至beautifulzzzz,网址http://www.cnblogs.com/zjutlitao/,推荐学习 蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到 ...
- 软工2017第五周——个人PSP
10.13 --10.19本周例行报告 1.PSP(personal software process )个人软件过程. 类型 任务 预计时间 开始时间 结束时间 中断时 ...
- Java学习个人备忘录之抽象类
抽象类 特点:1. 方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰,抽象方法必须定义在抽象类中.该类必须也被abstract修饰2. 抽象类不可以被实例化. 为什么? 因为调 ...
- 20145214实验四 Android开发基础
20145214实验四 Android开发基础 实验内容及步骤 安装 JDK 并配置 JDK 环境变量 找到之前path变量中的jdk文件所在位置并复制. 用复制的变量名新建一个 JAVA_HOME ...
- 【Linux】CentOS安装redis
CENTOS7下安装REDIS 安装完成之后使用:redis-cli命令连接,如图: 提示:/var/run/redis_6379.pid exists, process is already run ...
- Linux服务器记录并查询历史操作记录
Linux服务器在使用过程中,经常会有除自己之外的其他人员使用.并不是每个人都对Linux服务器特别熟悉,难免会有一些操作导致服务器报错. 因此,监控Linux服务器的操作并记录下来,是非常有必要的! ...