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

前言

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

效果图

ToastCustomUtil【简单的Toast封装类】【自定义Toast的显示风格】-LMLPHP

代码分析

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

使用步骤

一、项目组织结构图

ToastCustomUtil【简单的Toast封装类】【自定义Toast的显示风格】-LMLPHP

注意事项:

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

04-14 05:05