• 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

  • 相关阅读:
    找出一个序列中第k大的元素 [快速选择问题]
    选择排序算法分析
    冒泡排序算法分析
    mysql的安装和配置
    Redis 简明教程
    flink-杂记
    redis-list
    bean创建过程
    镜像
    docker-命令
  • 原文地址:https://www.cnblogs.com/whycxb/p/6838199.html
Copyright © 2020-2023  润新知