版权声明:本文为HaiyuKing原创文章,转载请注明出处!

前言

ToastUtil + ToastCustom结合。主要解决低版本机型上系统toast显示不好看的问题。

效果图

代码分析

在ToastUtil类的基础上,结合ToastCustom类,将ToastUtil类中的Toast全部替换成ToastCustom。

使用步骤

一、项目组织结构图

注意事项:

1、  导入类文件后需要change包名以及重新import R文件路径

2、  Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

二、导入步骤

参考《ToastCustom【自定义显示风格的Toast】》中的导入步骤。

参考《ToastUtil【简单的Toast封装类】【未自定义Toast的显示风格】》中的导入步骤。

将原ToastUtil类名换成ToastCustomUtil。关键是需要将原ToastUtil类中的Toast替换成ToastCustom。参考如下:

package com.why.project.toastcustomutildemo.util;

import android.content.Context;
import android.view.Gravity;
import android.widget.Toast; import com.why.project.toastcustomutildemo.MyApplication;
import com.why.project.toastcustomutildemo.views.ToastCustom; /**
* Create By HaiyuKing
* Used 简单的Toast封装类,自定义Toast的显示风格
*/
public class ToastCustomUtil { private static ToastCustom toast;//实现不管我们触发多少次Toast调用,都只会持续一次Toast显示的时长 /**
* 短时间显示Toast【居下】
* @param msg 显示的内容-字符串*/
public static void showShortToast(String msg) {
if(MyApplication.getAppContext() != null){
if (toast == null) {
toast = ToastCustom.makeText(MyApplication.getAppContext(), msg, Toast.LENGTH_SHORT);
} else {
toast.setText(msg);
}
//1、setGravity方法必须放到这里,否则会出现toast始终按照第一次显示的位置进行显示(比如第一次是在底部显示,那么即使设置setGravity在中间,也不管用)
//2、虽然默认是在底部显示,但是,因为这个工具类实现了中间显示,所以需要还原,还原方式如下:
toast.setGravity(Gravity.BOTTOM, 0, dip2px(MyApplication.getAppContext(),64));
toast.show();
}
}
/**
* 短时间显示Toast【居中】
* @param msg 显示的内容-字符串*/
public static void showShortToastCenter(String msg){
if(MyApplication.getAppContext() != null) {
if (toast == null) {
toast = ToastCustom.makeText(MyApplication.getAppContext(), msg, Toast.LENGTH_SHORT);
} else {
toast.setText(msg);
}
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
} /**
* 短时间显示Toast【居上】
* @param msg 显示的内容-字符串*/
public static void showShortToastTop(String msg){
if(MyApplication.getAppContext() != null) {
if (toast == null) {
toast = ToastCustom.makeText(MyApplication.getAppContext(), msg, Toast.LENGTH_SHORT);
} else {
toast.setText(msg);
}
toast.setGravity(Gravity.TOP, 0, 0);
toast.show();
}
} /**
* 长时间显示Toast【居下】
* @param msg 显示的内容-字符串*/
public static void showLongToast(String msg) {
if(MyApplication.getAppContext() != null) {
if (toast == null) {
toast = ToastCustom.makeText(MyApplication.getAppContext(), msg, Toast.LENGTH_LONG);
} else {
toast.setText(msg);
}
toast.setGravity(Gravity.BOTTOM, 0, dip2px(MyApplication.getAppContext(),64));
toast.show();
}
}
/**
* 长时间显示Toast【居中】
* @param msg 显示的内容-字符串*/
public static void showLongToastCenter(String msg){
if(MyApplication.getAppContext() != null) {
if (toast == null) {
toast = ToastCustom.makeText(MyApplication.getAppContext(), msg, Toast.LENGTH_LONG);
} else {
toast.setText(msg);
}
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
}
/**
* 长时间显示Toast【居上】
* @param msg 显示的内容-字符串*/
public static void showLongToastTop(String msg){
if(MyApplication.getAppContext() != null) {
if (toast == null) {
toast = ToastCustom.makeText(MyApplication.getAppContext(), msg, Toast.LENGTH_LONG);
} else {
toast.setText(msg);
}
toast.setGravity(Gravity.TOP, 0, 0);
toast.show();
}
} /*=================================常用公共方法============================*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
}

三、使用方法

ToastCustomUtil.showShortToast("ToastCustomUtilDemo");//如果显示字符串,直接写即可
ToastCustomUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.app_name));//如果想要显示Strings.xml文件中的字符串,建议使用MyApplication.getAppContext()

如果是在Fragment、DialogFragment中调用ToastCustomUtil类,则建议使用下面的方式

if(isAdded()) {//如果该Fragment对象被添加到了它的Activity中,那么它返回true,否则返回false。
  ToastCustomUtil.showShortToast(MyApplication.getAppContext().getResources().getString(R.string.app_name));
}

如果是在网络请求框架的异步处理中调用的话,可能会报错,那么可以考虑使用下面的解决方案:

/**用于toast提示*/
public static final int TOAST_SHOW = 18;
/**主要用于toast提示*/
private Handler mHandler;
//主要用于加载对话框的显示
mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case TOAST_SHOW:
ToastCustomUtil.showShortToast((String)msg.obj);
break;
}
}
};
Message msg = new Message();
msg.what = TOAST_SHOW;
msg.obj = "请求超时,请重新登录";
mHandler.sendMessage(msg);

混淆配置

参考资料

暂时空缺

项目demo下载地址

https://github.com/haiyuKing/ToastCustomUtilDemo

ToastCustomUtil【简单的Toast封装类】【自定义Toast的显示风格】的更多相关文章

  1. Android带图片的Toast(自定义Toast)

    使用Android默认的Toast Toast简介: Toast是一个简单的消息显示框,能够短暂的出现在屏幕的某个位置,显示提示消息. 默认的位置是屏幕的下方正中,一般Toast的使用如下: Toas ...

  2. ToastUtil【简单的Toast封装类】【未自定义Toast的显示风格】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 一个简单的Toast封装类. 效果图 API = 6.0 API = 4.4.2 代码分析 实现了不管我们触发多少次Toast调用, ...

  3. 自定义Toast和RatingBar的简单用例

    Toast是一个包含用户点击消息.Toast类会帮助你创建和显示这些.Android中的Toast是一种简易的消息提示框. 当视图显示给用户,在应用程序中显示为浮动 向右划动五角星增加 单击按钮显示自 ...

  4. 简单好用的Toast封装类——EasyToast

    我们用toast时不能设置显示的时间,而且不支持在线程中展示toast,下面我对原始的toast进行了封装,这样我们可以很方便的进行toast的使用了. package com.kale.lib.ut ...

  5. 自定义Toast解决快速点击时重复弹出,排队无止尽

    解决办法:自定义MyToast类: public class MyToast { /** 之前显示的内容 */ private static String oldMsg ; /** Toast对象 * ...

  6. Android Toast 设置到屏幕中间,自定义Toast的实现方法,及其说明

    http://blog.csdn.net/wangfayinn/article/details/8065763 Android Toast用于在手机屏幕上向用户显示一条信息,一段时间后信息会自动消失. ...

  7. Android开发必知--自定义Toast提示

    开发过Android的童鞋都会遇到一个问题,就是在打印Toast提示时,如果短时间内触发多个提示,就会造成Toast不停的重复出现,直到被触发的Toast全部显示完为止.这虽然不是什么大毛病,但在用户 ...

  8. android 自定义Toast显示风格

    1.创建一个自己想要显示Toast风格的XML如下代码(toast_xml.xml): <?xml version="1.0" encoding="utf-8&qu ...

  9. 自定义Toast样式-两行文本居中显示

    toast可以设置自定义的view和显示位置.下面是一个简单的例子,复杂些的就是改变其布局文件就可以了. /** * @author BMR * @ClassName: ToastWithTwoTex ...

随机推荐

  1. http2.0与http1.X的区别

    此文只是方便重看,原文在:http://www.mamicode.com/info-detail-1199706.html 1.1 HTTP应用场景 http诞生之初主要是应用于web端内容获取,那时 ...

  2. Kafka的CommitFailedException异常

    一.含义 CommitFailedException异常:位移提交失败时候抛出的异常.通常该异常被抛出时还会携带这样的一段话: Commit cannot be completed since the ...

  3. System.out.println()

    System是java.lang中的类,out为System中的一个静态数据成员,out是java.io.PrintStream类的对象,而println()是java.io.PrintStream类 ...

  4. Math.pow();Math.sqrt();

    //Math.pow(a,b)功能是a的b次方 (int)Math.sqrt(n):先对n开方,然后转成int类型//例如,(int)Math.sqrt(2)=(int)1.414=1 Math.ab ...

  5. Java 线程池(ThreadPoolExecutor)原理分析与使用

    在我们的开发中"池"的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 使用线程池的好处 1.降低资源消耗 可以重复利用 ...

  6. BZOJ_4867_[Ynoi2017]舌尖上的由乃_分块+dfs序

    BZOJ_4867_[Ynoi2017]舌尖上的由乃_分块+dfs序 Description 由乃为了吃到最传统最纯净的美食,决定亲自开垦一片菜园.现有一片空地,由乃已经规划n个地点准备种上蔬菜.最新 ...

  7. ELK 架构之 Elasticsearch、Kibana、Logstash 和 Filebeat 安装配置汇总(6.2.4 版本)

    相关文章: ELK 架构之 Elasticsearch 和 Kibana 安装配置 ELK 架构之 Logstash 和 Filebeat 安装配置 ELK 架构之 Logstash 和 Filebe ...

  8. 【转】干货,Kubernetes中的Source Ip机制。

    准备工作 你必须拥有一个正常工作的 Kubernetes 1.5 集群,用来运行本文中的示例.该示例使用一个简单的 nginx webserver 回送它接收到的请求的 HTTP 头中的源 IP 地址 ...

  9. Linux 系统目录结构说明

    在刚开始接触Linux系统时,对其目录结构迷茫的很,尤其是很少使用或者刚开始接触Linux系统的同学:我也是最近项目需要开始上手,所以查看了些资料,特整理出来供大家互相学习: 1.目录结构总揽 以下是 ...

  10. Google 的 QUIC 华丽转身成为下一代网络协议: HTTP/3.0

    HTTP/2.0 还没有普及,HTTP/3.0 标准就要被制定了. 据 IETF 透露,HTTP-over-QUIC 实验协议将被重命名为 HTTP/3,并成为 HTTP 协议的第三个正式版本. IE ...