一、 ToastView.java

 1 import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast; public class ToastView extends LinearLayout{
private static ToastView mToastView; private TextView toastText;
private ImageView toastIcon;
private Context mContext; private View layout;
private Toast mToast; private ToastView(Context context) {
super(context,null);
mContext = context;
LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layout = inflater.inflate(R.layout.toast, null); toastIcon = (ImageView) layout.findViewById(R.id.toastIcon);
toastText = (TextView) layout.findViewById(R.id.toastText);
} public static ToastView getInstance(Context context) {
if (mToastView != null) {
return mToastView;
} else {
if (context != null) {
mToastView = new ToastView(context);
return mToastView;
} else {
return null;
}
}
} public void setIconVisiblity(int visiblity){
toastIcon.setVisibility(visiblity);
} public void showToast(String str,int gravity,int xoffset,int yoffest) {
toastText.setText(str); if(mToast!=null){
mToast.setGravity(gravity,xoffset,yoffest);
mToast.show();
}else{
mToast= new Toast(mContext);
mToast.setView(layout);
mToast.setGravity(gravity,xoffset,yoffest);
mToast.setDuration(Toast.LENGTH_SHORT);
mToast.show();
}
} public void showToast(String str,int gravity,int xoffset,int yoffest,int duration) {
toastText.setText(str);
duration = duration<=0 ? Toast.LENGTH_SHORT : duration; if(mToast!=null){
mToast.setGravity(gravity,xoffset,yoffest);
mToast.setDuration(duration);
mToast.show();
}else{
mToast= new Toast(mContext);
mToast.setView(layout);
mToast.setGravity(gravity,xoffset,yoffest);
mToast.setDuration(duration);
mToast.show();
}
} }

二、toast.xml

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"> <TextView
android:id="@+id/toastText"
android:layout_width="wrap_content"
android:layout_height="@dimen/toastHeight"
android:textColor="@color/title_text_color"
android:background="@drawable/toast_bg"
android:gravity="center"
android:paddingLeft="@dimen/toastTextPaddingLeft"
android:paddingRight="@dimen/toastTextPaddingRight"
android:textSize="@dimen/toastTextSize"/> <ImageView
android:id="@+id/toastIcon"
android:layout_width="@dimen/toastIconWidth"
android:layout_height="@dimen/toastIconWidth"
android:layout_marginLeft="@dimen/toastIconWidth"
android:scaleType="fitXY"
android:layout_centerVertical="true"
android:src="@drawable/toast_icon" />
</RelativeLayout>

三、Acitivity中调用

    //自定义的
private void showToast(String str, int offset) {
ToastView toast = ToastView.getInstance(RecommendActivity.this);
if(offset < 0){
toast.showToast(str, Gravity.TOP | Gravity.CENTER_HORIZONTAL,0,    //默认时长的Toast
(int)getResources().getDimension(R.dimen.defaultToastMarginTop));
}else{
toast.showToast(str, Gravity.TOP | Gravity.CENTER_HORIZONTAL,0,    //自定义时长的Toast
(int)getResources().getDimension(R.dimen.defaultToastMarginTop), offset);
}
}

封装的这个Toast没什么技术含量。

但是,之所以把Toast定义为单例模式,是为了防止疯狂点击按钮,出现连续不断的Toast

因为系统的Toast是维护一个队列,每次cancle只对当前的Toast 有用。所以之后的Toast还是会不停出现

这个Toast改为单例模式之后。如果当前Toast不为空,只对其进行setText。然后show(不调用show不会出现)

如果当前为空,才会新建一个ToastView。

封装 Toast的更多相关文章

  1. React Native封装Toast与加载Loading组件

    React Native开发封装Toast与加载Loading组件 在App开发中,我们避免不了使用的两个组件,一个Toast,一个网络加载Loading,在RN开发中,也是一样,React Nati ...

  2. 原生JS封装 toast 弹层,自动关闭

    由于公司业务需求,要一个公共toast ,下面是自己封装的一个. css: .toast { text-align: center; min-height: 70px; width: 220px; c ...

  3. appium自动化测试中获取toast消息的解决方法【转】

    http://blog.csdn.net/hqzxsc2006/article/details/50036911 待实践.. 解决方法:appium下切换selendroid模式去获取Android的 ...

  4. appium桌面版本以及一些自动化测试方方封装

    appium_desktop 标签(空格分隔): appium_desktop 一 appium_desktop_v1.2.6 1.appium_desktop在github上最新下载地址:appiu ...

  5. appium之toast处理

    注意 toast要appium1.6.3以上版本才支持,Android 5.0以上(需使用夜神多开模拟器),jdk1.8且配置了环境变量. toast定位 1.先看下toast长什么样,如下图,像这种 ...

  6. 『与善仁』Appium基础 — 29、获取toast信息

    目录 1.toast介绍 2.toast定位 3.示例 4.封装toast判断 1.toast介绍 Android中的toast是一种简易的消息提示框,toast提示框不能被用户点击,会根据所设置的显 ...

  7. android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理

    本示例说明: 1.自定义listview条目样式,自定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,并且操作后listview自动刷新. 3.响应用户操作点击事 ...

  8. android listview综合使用演示样例_结合数据库操作和listitem单击长按等事件处理

    本演示样例说明: 1.自己定义listview条目样式,自己定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,而且操作后listview自己主动刷新. 3.响应用 ...

  9. 分析BGARefreshLayout-master

    一.知识点,创建BaseActivity 建立方法的逻辑顺序 并将一些常用的方法填充到其中 ①.将initView().setListener().onClick().processLogic()方法 ...

随机推荐

  1. mysql数据库优化课程---5、要索引和不要索引的区别是什么

    mysql数据库优化课程---5.要索引和不要索引的区别是什么 一.总结 一句话总结: 索引速度快,就是查表的时候,操作的话设置索引就好了 1.数据库设计的时候不允许字段为null的好处是什么? nu ...

  2. SQL授权语句(MySQL基本语句)

    看他们网上的,写得都是千篇一律,同时,好多也写得不是很好,下面是我自己总结的有关mysql的使用细节,也是我在学习过程中的一些记录吧,希望对你有点帮助,后面有关存储过程等相关操作还没有总结好,下次总结 ...

  3. windows live writer 原始图片大小设置

          点击图片,右面对图片参数进行设置,然后点击保存默认设置. 那么以后再插入图片,就不要重新操作了.    

  4. IOC和DI,AOP的本质理解

    IOC: Inversion of Control,控制反转, 控制权从应用程序转移到框架(如IOC容器),是框架共有的特性. 对于IOC的理解,可以把IOC看作是一个生产和管理bean对象的容器.原 ...

  5. Tomcat翻译--The Host Container

    原文:http://tomcat.apache.org/tomcat-7.0-doc/config/host.html Introduction(介绍) The Host element repres ...

  6. tableau join 与格式问题

    一开始我没有找到它的join 方法.其实应该是编辑相应的join关系.选择数据源,选择字段.数据源是可以选择的. 剩下的计算问题,要再弄下.不好说,这个其实烦了我很久了. 高级选项,扩展最大行数.即可 ...

  7. Topshelf 和 Katana:统一的 Web 和服务体系结构

    Topshelf 和 Katana:统一的 Web 和服务体系结构 Wes McClure 下载代码示例 使用 IIS 托管 ASP.NET Web 应用程序已成为业界标准十年有余.构建此类应用程序的 ...

  8. JIRA 的安装和使用

    需要的软件 6.0.3-x32.exe jira_6.x_language_zh_CN.jar jira_crack.zip http://pan.baidu.com/s/1dEbpJc1 (从网盘下 ...

  9. Oracle 11g 客户端连接 oracle 10g 服务端,乱码问题

    从网上搜索资料基本确定:字符集错误 Pl/sql 连接到oracle 数据库   “select userenv('language') from dual” 找到服务端的对应的字符集,拷贝之: 到本 ...

  10. xsl教程学习笔记

    一 . Hello world 尝试: Hello.xml: <?xml version="1.0" encoding="UTF-8"?> < ...