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

版权声明:本文为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

posted @ 2017-05-10 22:00  HaiyuKing  阅读(525)  评论(0编辑  收藏  举报