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);
混淆配置
无
参考资料
暂时空缺