美文网首页
ToastUtil工具类

ToastUtil工具类

作者: 追风z | 来源:发表于2020-09-24 17:00 被阅读0次

一.使用ToastUtil

封装的目的:不让业务直接操作具体的框架,而操作我们的API,这样方便后面重构。

在Android开发中,有些时候,可能要求定制Toast,例如:前面显示一个图标,或者正确操作显示绿色,错误操作,显示红色;这时候可以自己定义,可以使用第三方框架。

//toast工具类
//https://github.com/GrenderG/Toasty
implementation 'com.github.GrenderG:Toasty:1.4.2'

项目的根目录build.gradle 文件

buildscript {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }//github网站上说这里也要配置
    }
   ...
}

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

使用如下:

1.在应用上下文初始化

/**
 * 全局Application
 */
public class AppContext extends Application {

    /**
     * 创建了 (第一次创建应用或者杀掉应用后就会执行一次这个方法)
     */
    @Override
    public void onCreate() {
        super.onCreate();
        //初始化toast工具类
        Toasty.Config.getInstance().apply();
    }
}

2.定义工具类

/**
 * Toast工具类
 */
public class ToastUtil {

    /**
     * 上下文
     * 这里的话,是持有应用的引用,所以应该不会造成内存泄漏
     */
    @SuppressLint("StaticFieldLeak")//最好写上这句(教程没有的)
    private static Context context;

    /**
     * 初始化方法
     *
     * @param context Context
     */
    public static void init(Context context) {
        ToastUtil.context = context;
    }

    /**
     * 显示短时间错误toast
     * <p>
     * 校验参数
     *
     * @param id      @StringRe:必须是字符串的id
     */
//    public static void errorShortToast(@NonNull Context context, @StringRes int id) {
    public static void errorShortToast(@StringRes int id) {
        //必须要调用show方法
        Toasty.error(context, id, Toasty.LENGTH_SHORT).show();
    }

    /**
     * 显示短时间错误toast 字符串的形式  目前requestErrorHandler方法使用到
     *
     * @param message Message
     */
    public static void errorShortToast(String message) {
        //必须要调用show方法
        Toasty.error(context, message, Toasty.LENGTH_SHORT).show();
    }


    /**
     * 显示长时间错误toast
     * @param id      字符串id
     */
//    public static void errorLongToast(@NonNull Context context, @StringRes int id) {
    public static void errorLongToast(@StringRes int id) {
        Toasty.error(context, id, Toasty.LENGTH_LONG).show();
    }

    /**
     * 显示短时间正确toast
     *
     * @param id 通过id找字符串
     */
    //    public static void successShortToast(@NonNull Context context, @StringRes int id) {
    public static void successShortToast(@StringRes int id) {
        Toasty.success(context, id, Toasty.LENGTH_LONG).show();
    }

    /**
     * 显示短时间正确toast
     *
     * @param data 字符串传入
     */
    public static void successShortToast(String data) {
        Toasty.success(context, data, Toasty.LENGTH_SHORT).show();
    }

}

3.使用工具类

ToastUtil.successShortToast(getMainActivity(), "登录成功");
ToastUtil.errorShortToast(getMainActivity(), R.string.enter_username);

二.重构ToastUtil

可以看到现在,每次使用ToastUtil的时候,还要传递Context,这样写起来比较麻烦,所以可以省略掉。

如何省略?
就是在应用启动的时候,初始化,也就是包context保存到ToastUtil,这样在显示toast的时候,就不用传递了。


1.把Context在应用启动的初始化,并购保存到ToastUtil工具类的static字段中
/**
 * 全局Application
 */
public class AppContext extends Application {

    /**
     * 创建了 (第一次创建应用或者杀掉应用后就会执行一次这个方法)
     */
    @Override
    public void onCreate() {
        super.onCreate();
        //初始化toast工具类
        Toasty.Config.getInstance().apply();
        //初始化Toast工具类
        ToastUtil.init(getApplicationContext());
    }
}

package com.ixuea.courses.mymusicold.util;

import android.annotation.SuppressLint;
import android.content.Context;

import androidx.annotation.StringRes;
import es.dmoral.toasty.Toasty;

**重构后的工具类**

/**
 * Toast工具类
 */
public class ToastUtil {

    /**
     * 上下文
     * 这里的话,是持有应用的引用,所以应该不会造成内存泄漏
     */
    @SuppressLint("StaticFieldLeak")//最好写上这句(教程没有的)
    private static Context context;

    /**
     * 初始化方法
     *
     * @param context Context
     */
    public static void init(Context context) {
        ToastUtil.context = context;
    }

    /**
     * 显示短时间错误toast
     * <p>
     * 校验参数
     *
     * @param id      @StringRe:必须是字符串的id
     */
//    public static void errorShortToast(@NonNull Context context, @StringRes int id) {
    public static void errorShortToast(@StringRes int id) {
        //必须要调用show方法
        Toasty.error(context, id, Toasty.LENGTH_SHORT).show();
    }

    /**
     * 显示长时间错误toast
     * @param id      字符串id
     */
//    public static void errorLongToast(@NonNull Context context, @StringRes int id) {
    public static void errorLongToast(@StringRes int id) {
        Toasty.error(context, id, Toasty.LENGTH_SHORT).show();
    }

    //    public static void successLongToast(@NonNull Context context, @StringRes int id) {
    public static void successLongToast(@StringRes int id) {
        Toasty.success(context, id, Toasty.LENGTH_SHORT).show();
    }
}

相关文章

  • 常用工具类

    BaseApp ToastUtil(Toast 工具类) MyAppGlideModule(自动缓存图片的工具类,...

  • 常用的工具类

    BaseApp ToastUtil(Toast 工具类) MyAppGlideModule(自动缓存图片的工具类,...

  • 工具类常用(夜间模式)

    BaseApp ToastUtil(Toast 工具类) HttpUtils、RxUtils、Constants(...

  • ToastUtil工具类

    步骤一:新建ToastUtil类 public class ToastUtil { private static ...

  • ToastUtil工具类

    自定义toast,解决系统toast连续弹出,长时间不消失的问题

  • ToastUtil工具类

    一.使用ToastUtil 封装的目的:不让业务直接操作具体的框架,而操作我们的API,这样方便后面重构。 在An...

  • Android ToastUtil

    ToastUtil(工具类) APP(初始化) AndroidManifest.xml(清单文件)

  • Toast封装(2018.10.15)

    1. ToastUtil类 2. 调用 ToastUtil.show(activity,activity.getS...

  • Android-ToastUtil提示框

    1、调用方法 R.string.regist_not_empty_pwd:文字描述 2、创建ToastUtil类

  • ToastUtil

    public class ToastUtil { public static ToastmToast; publi...

网友评论

      本文标题:ToastUtil工具类

      本文链接:https://www.haomeiwen.com/subject/gqfgyktx.html