之前用了Toasty,确实挺不错的,也非常简单,但是实际使用中每用一次都要传好久几个参数还是过于麻烦,那么话不多说,封装呗。
第一步还是导入依赖,之前的文章有讲,就不说了。新建一个类,我取名为Tw,你自己随意。
我们先来封装一个success的Toast,
Toasty.success(MainActivity.this, "This is a success toast.", Toast.LENGTH_SHORT, true).show();
上面是直接使用时的方法,封装的过程无非就是把方法单独放置,统一给参数。那么我们来看,这里需要满足四个参数:context 内容 持续时间 是否带图标。第234个参数非常好解决,关键是第1个,你使用时肯定在不同的activity、fragment。关键就在于怎么获取使用时的context,我选择的是自定义application。
创建一个类,命名为MyApplication,继承Application。由于这里的作用就是获取context,需要定义一个context来储存
private static Context mAppContext;
然后onCreate方法,获得mAppContext
@Override public void onCreate() { super.onCreate(); mAppContext = this; }
获取的有了,但在其他地方调用时,还需要一个方法来使获取的这个值返回,
public static Context getAppContext() { return mAppContext; }
最终这个类的全部代码就是
import android.app.Application; import android.content.Context; public class MyApplication extends Application { private static Context mAppContext; @Override public void onCreate() { super.onCreate(); mAppContext = this; } public static Context getAppContext() { return mAppContext; } }
ok,这就可以用了,再回到success的封装上,这就很清晰了呀。
参数1:context,解决了,调用时 你的自定义application类名.自定义获取值的方法名 就可以,以我为例
MyApplication.getAppContext()
参数2:内容,每次使用的时候传进来
参数3:持续时间,我个人的需求short就行了,你自己可以自定义
参数4:是否带图标,我的需求是true
那么在Tw的类里,success的方法就是
public static void success(String text) { Toasty.success(MyApplication.getAppContext(), text, Toast.LENGTH_SHORT, true).show(); }
调用时 类名.方法名(传入的String内容) 就可以,以我为例
Tw.success("123456789");
而自定义Toasty的封装也以此类推
public static void info(String text) { Toasty.custom(MyApplication.getAppContext(), text, R.drawable.ic_toast_info, R.color.colorPrimary, Toast.LENGTH_SHORT, true, true).show(); }
参数分别是:context 内容 自定义图标 Toast背景色 持续时间 是否带图标 是否自定义背景色
文字颜色的话,用Toasty的全局设置就ok。
效果图
最后惯例放上源码和demo,apk在Tosty\app\build\outputs\apk\debug里
蓝奏云(工程名和包名的Tosty不是失误打错了,而是因为名字重了故意打成Tosty的)