原标题:超简单实现Android自定义Toast

Bamboy的自定义Toast,(以下称作“BToast”)

特点在于使用简单,

并且自带两种样式:

1)普通的文字样式;

2)带图标样式。

其中图标有√和×两种图标。

BToast还有另外一个特点就是:

系统自带Toast采用的是队列的方式,

等当前Toast消失后,

下一个Toast才能显示出来;

而BToast会把当前Toast顶掉,

直接显示最新的Toast。

看效果先:

简单三步,

我们现在就开始自定义一下吧!

(一)、Layout:

要自定义Toast,

首先我们需要一个XML布局。

但是在布局之前我们需要三个资源文件,

分别是背景、√和×。

背景可以用XML画出来:

toast_back.xml

√和×就最好用图片啦,

源码里面有这两张图片,

这里就不贴出来了。

现在就可以写布局了:

toast_layout.xml

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@drawable/toast_back"

android:gravity="center_vertical"

android:padding="13dp"

android:orientation="vertical">

android:id="@+id/toast_img"

android:layout_width="50dp"

android:layout_height="50dp"

android:background="@drawable/toast_y"

android:layout_gravity="center_horizontal"

android:layout_marginBottom="5dp"/>

android:id="@+id/toast_text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:layout_marginLeft="10dp"

android:layout_marginRight="10dp"

android:textColor="#FFFFFF"

android:gravity="center"

android:textSize="17sp"/>

所需要的XML现在已经OK,

剩下的就是Java部分了。

(二)、Java:

写一个BToast类,继承Toast、

成员变量自身单例、

还有构造函数:

publicclassBToastextendsToast{

/**

* Toast单例

*/

privatestaticBToast toast;

/**

* 构造

*

* @paramcontext

*/

publicBToast(Context context){

super(context);

}

}

为了实现可以吧当前Toast顶下去的需求,

我们需要重写几个方法

/**

* 隐藏当前Toast

*/

publicstaticvoidcancelToast{

if(toast != null) {

toast.cancel;

}

}

publicvoidcancel{

try{

super.cancel;

} catch(Exception e) {

}

}

@Override

publicvoidshow{

try{

super.show;

} catch(Exception e) {

}

}

现在我们就可以写我们的逻辑了,

首先当然是引入我们的布局咯:

/**

* 初始化Toast

*

* @paramcontext 上下文

* @paramtext 显示的文本

*/

privatestaticvoidinitToast(Context context, CharSequence text){

try{

cancelToast;

toast = newBToast(context);

// 获取LayoutInflater对象

LayoutInflater inflater =

(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

// 由layout文件创建一个View对象

View layout = inflater.inflate(R.layout.toast_layout, null);

// 吐司上的图片

toast_img = (ImageView) layout.findViewById(R.id.toast_img);

// 吐司上的文字

TextView toast_text = (TextView) layout.findViewById(R.id.toast_text);

toast_text.setText(text);

toast.setView(layout);

toast.setGravity(Gravity.CENTER, 0, 70);

} catch(Exception e) {

e.printStackTrace;

}

}

一切准备工作都已就绪,

接下来就是显示Toast的方法了:

/**

* 图标状态 不显示图标

*/

privatestaticfinalintTYPE_HIDE = - 1;

/**

* 图标状态 显示√

*/

privatestaticfinalintTYPE_TRUE = 0;

/**

* 图标状态 显示×

*/

privatestaticfinalintTYPE_FALSE = 1;

/**

* 显示Toast

*

* @paramcontext 上下文

* @paramtext 显示的文本

* @paramtime 显示时长

* @paramimgType 图标状态

*/

privatestaticvoidshowToast(Context context, CharSequence text, inttime, intimgType){

// 初始化一个新的Toast对象

initToast(context, text);

// 设置显示时长

if(time == Toast.LENGTH_LONG) {

toast.setDuration(Toast.LENGTH_LONG);

} else{

toast.setDuration(Toast.LENGTH_SHORT);

}

// 判断图标是否该显示,显示√还是×

if(imgType == TYPE_HIDE) {

toast_img.setVisibility(View.GONE);

} else{

if(imgType == TYPE_TRUE) {

toast_img.setBackgroundResource(R.drawable.toast_y);

} else{

toast_img.setBackgroundResource(R.drawable.toast_n);

}

toast_img.setVisibility(View.VISIBLE);

// 动画

ObjectAnimator.ofFloat(toast_img, "rotationY", 0, 360).setDuration( 1700).start;

}

// 显示Toast

toast.show;

}

就是这么简单。

细心的朋友可能发现了,

这个方法是private的,

先别产生疑虑,

听我慢慢道来。

写到这里,

其实你可以直接把这个方法改成Public,

这样的话现在就已经大功告成了,

但是这样的话与原生Toast使用起来有什么区别?

还是需要写那么长一串参数,

唯一的好处就是不用写.show了。

咱们现在做的事情叫“自定义”,

既然如此,

我们何不提升一下“用户体验”呢?

我们开始进行最后一步。

/**

* 显示一个纯文本吐司

*

* @paramcontext 上下文

* @paramtext 显示的文本

*/

publicstaticvoidshowText(Context context, CharSequence text){

showToast(context, text, Toast.LENGTH_SHORT, TYPE_HIDE);

}

/**

* 显示一个带图标的吐司

*

* @paramcontext 上下文

* @paramtext 显示的文本

* @paramisSucceed 显示【对号图标】还是【叉号图标】

*/

publicstaticvoidshowText(Context context, CharSequence text, booleanisSucceed){

showToast(context, text, Toast.LENGTH_SHORT, isSucceed ? TYPE_TRUE : TYPE_FALSE);

}

/**

* 显示一个纯文本吐司

*

* @paramcontext 上下文

* @paramtext 显示的文本

* @paramtime 持续的时间

*/

publicstaticvoidshowText(Context context, CharSequence text, inttime){

showToast(context, text, time, TYPE_HIDE);

}

/**

* 显示一个带图标的吐司

*

* @paramcontext 上下文

* @paramtext 显示的文本

* @paramtime 持续的时间

* @paramisSucceed 显示【对号图标】还是【叉号图标】

*/

publicstaticvoidshowText(Context context, CharSequence text, inttime, booleanisSucceed){

showToast(context, text, time, isSucceed ? TYPE_TRUE : TYPE_FALSE);

}

publicvoid click(View view) {

switch (view.getId) {

case R.id.btn_text:

BToast.showText( this, "简单提示");

break;

case R.id.btn_text_true:

BToast.showText( this, "简单提示 正确图标", true);

break;

case R.id.btn_text_false:

BToast.showText( this, "简单提示 错误图标", false);

break;

case R.id.btn_text_long:

BToast.showText( this, "简单提示 长~ ", Toast.LENGTH_LONG);

break;

case R.id.btn_text_true_long:

BToast.showText( this, "简单提示 正确图标 长~ ", Toast.LENGTH_LONG, true);

break;

case R.id.btn_text_false_long:

BToast.showText( this, "简单提示 错误图标 长~ ", Toast.LENGTH_LONG, false);

break;

}

}

是不是比原生的Toast好用多了?

是不是逼格满满?

http://download.csdn.net/download/bamboy_/9751189

本Demo有更新,

去掉了对号和叉号图标,

换用背景颜色来替代,

感兴趣的同学可以克隆Bamboy合集:

Git地址:https: //github.com/Bamboy120315/bamboy.git

手机浏览器扫码直接下载安装 返回搜狐,查看更多

责任编辑:

android 自定义 对号,超简单实现Android自定义Toast相关推荐

  1. android 流星动画,超简单的android 流星雨动画 流星动画

    1.直接看效果 2.布局文件 xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http: ...

  2. android扫码 超简单零代码

    android扫码 超简单零代码 小序 背景介绍 前期准备 zxing和华为扫码服务对比 开始搬运 结语 小序 这是一篇纯新手教学,本人之前没有任何安卓开发经验(尴尬),本文也不涉及任何代码就可以使用 ...

  3. 一个超简单的android任务列队(排队)3

    一个超简单的android任务列队(排队)3 上一篇讲到了列队中的任务超时,这一篇继续对列队任务进行扩展,新增插入任务到列队中,可以实现插队功能,实现异步请求列队.来看代码,在LineUpTaskHe ...

  4. 自己动手调试Android源码(超简单)

    在自己动手编译Android最新源码一文中,我们为自己编译了一份最新的Android源码.很多时候,我们编译源码的目的不仅仅是尝试一番,而是希望对其进行调试,并修改源码,看看其中一些关键机制的运行原理 ...

  5. 超简单配置Android持续集成自动化打包流程 - GitHub+GitLab-CI+蒲公英+钉钉

    我的Github:github.com/BzCoder GitLab-CI的相关语法:fennay.github.io/gitlab-ci-c- 欢迎各位留言讨论 场景 为了优化工作流程,解放开发人员 ...

  6. 打包android阴影不见,Android无pading超简单超实用阴影解决方案

    前言 这个迭代,UI在给了几张带阴影的图片,那种阴影范围很大,实际内容却只有一点的图片. 效果类似这样. 不知道这张图有没有表达清楚,就是那种图片之间阴影需要重叠才能使内容对其,阴影还有颜色的效果. ...

  7. 一步教你超简单设置Android Studio背景图片

    想知道如何将Android Studio设置成下面这样的背景吗 今天就教你一个非常简单的方法 首先打开自己的android项目 点击左上角的File,选择Settings选项 依次选择Appearan ...

  8. 一个超简单的android任务列队(排队)

    android 一个简单的任务列队的实现 创建任务列队帮助类LineUpTaskHelp 创建任务实体类,支持扩展 应用-Test 创建任务列队帮助类LineUpTaskHelp 代码直接copy可用 ...

  9. 超简单的Android圆形进度条

    效果图: 代码优化/简化.教科书级别注释.复制粘贴即可用 代码: package com.zistone.factorytest0718.view;import android.content.Con ...

  10. 超简单的android 流星雨动画 流星动画

    1.直接看效果 2.布局文件 <?xml version="1.0" encoding="utf-8"?> <androidx.constra ...

最新文章

  1. 你的灯亮着吗 读后感2
  2. C# Windows基础拾遗01—线条绘制篇
  3. ESP8266固件的下载
  4. [Leetcode Week13]Palindrome Partitioning
  5. 在Delphi中关于UDP协议的实现
  6. 使用静态代理模式实现公用的报表导出功能
  7. 清理linux 服务器的命令行,使用Linux上的Magic SysRq键修复冻结的X服务器,清理重新启动并运行其他低级命令 | MOS86...
  8. redis-数据类型-有序集合
  9. “人,年轻时一定要去大公司、大城市奋斗”你怎么看?
  10. JAVA实现求五个数阶乘之和 小实例
  11. VTM3.0代码阅读:xCheckRDCostAffineMerge2Nx2N函数
  12. pb11.5调用系统打印机
  13. unity期末大作业消消乐小游戏(附下载链接)
  14. maya! board_老司机都在用的30款maya常用插件
  15. 融云观察:壳壳语音新玩法,深挖语音社交市场
  16. nordic nFR52832 PCA10040 blinky例程分析
  17. export default (imported as router) was not found_一篇文章搞定as四大用法
  18. 基于ENVI下的土地利用信息提取(一)
  19. 玩转数据可视化之R语言ggplot2:(六)统计变换绘图:包括加权绘图、数据分布图、曲面图、图形重叠处理等
  20. ih5手机版怎么登录服务器未响应,ih5 与服务器链接教程

热门文章

  1. css3直线运动_【转载】运动曲线提升CSS动画效果
  2. Amazon AWS 中国区 G2 服务器 配置运行
  3. Flutter 编译失败shared_preferences_macos
  4. Excel图表制作(一):商务图表之甘特图
  5. 万字讲述如何通过Doris构建数据中台
  6. angular页面间传递参数
  7. ES6数组得扩展与对象的扩展
  8. 《科尼龙作曲家》——简单易用又功能丰富的五线谱编辑和作曲软件
  9. 单片机---HLK-W801移植Nes模拟器(一)
  10. 0x80070057复制从服务器复制文件,0x80070057各种错误解决方法教程