1 AppToast介绍
1.1 实现方式
全局只有一个Toast实例,每次调用show()
方法显示Toast前都要先取消上次的Toast显示,然后显示本次的消息。
首先创建一个名为AppToast的类,在里面定义一个全局静态Toast对象和一个全局Application对象的弱引用。
private static Toast toast = null; // Global Toast
private static WeakReference<Application> app;
定义一个init()
方法,用于得到用户传入的Application实例。
public static void init(Application application) {
app = new WeakReference<Application>(application);
}
封装showToast()
方法,方便调用。
/**
* Display Toast
*
* @param resId The resource id of the string resource to use. Can be formatted text.
*/
public static void showToast(@StringRes int resId) {
if (toast != null) {
toast.cancel();
toast = null;
}
toast = Toast.makeText(app.get(), resId, LENGTH_SHORT);
toast.show();
}
也可以封装一个getToast()
方法用于得到Toast实例,允许我们设置其属性,便于自定义Toast显示的效果。
/**
* Get a Toast object <br>
* Need to call show() method to be displayed
*
* @return Toast object.
*/
public static Toast getToast() {
if (toast != null) {
toast.cancel();
toast = null;
}
toast = Toast.makeText(app.get(), "", Toast.LENGTH_SHORT);
return toast;
}
1.2 使用方法
首先创建一个类继承自Application
,在其onCreate()
方法中调用我们之前写的init()
方法进行AppToast类的初始化。
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 初始化AppToast库
AppToast.init(this);
}
}
注意:不要忘记在AndroidManifest.xml文件中的application节点下配置android:name属性。
<application
...
android:name=".MyApplication" >
<activity android:name=".MainActivity" >
...
</activity>
</application>
之后就可以在代码中进行使用了,比如:
AppToast.showToast(R.string.toast2);
和
Toast toast = AppToast.getToast();
toast.setGravity(Gravity.TOP | Gravity.CENTER, 0, 0);
toast.setText("自定义Toast");
toast.setDuration(Toast.LENGTH_SHORT);
toast.show();
显示效果如下图:
开源库、样例工程、详细文档下载地址:
liying2008/ApplicationToast
该库已上传至jcenter仓库,使用Android Studio可以通过在线依赖引用的方式引入该库。
dependencies {
compile 'cc.duduhuo.applicationtoast:applicationtoast:0.3'
}
2 CusToast介绍
2.1 功能介绍
CusToast是一个具有即时显示并且内置了10种样式的Toast工具库,现在简单介绍其实现原理。
在CusToast类中定义了一个枚举类型Style,即Toast显示的样式。
public enum Style {
DEFAULT,
LIGHT_BLUE,
BLUE,
LIGHT_RED,
RED,
LIGHT_GREEN,
GREEN,
LIGHT_YELLOW,
YELLOW,
GRAY_1
}
为了方便对Toast对象进行操作,我们创建一个自定义的Toast类,其继承自Toast,方便我们扩展Toast的功能,比如显示带图片的Toast和显示带副标题的Toast。
通过向DToast
类的setView()
方法传入样式名,得到不同样式的DToast
。
/**
* Add a view to CusToast.
*
* @param application this application.
* @param style the style of CusToast.
* @return current instance.
*/
public DToast setView(Application application, CusToast.Style style) {
dView = View.inflate(application, R.layout.ddh_cus_toast, null);
dText = (TextView) dView.findViewById(R.id.dText);
setStyle(style);
super.setView(dView);
return this;
}
其余方法和布局文件请参考文末链接。
CusToast
类中的showToast()
方法如下所示。
/**
* Display Toast.
*
* @param text The resource id of the string resource to use. Can be formatted text.
*/
public static void showToast(@StringRes int text) {
clearToast();
toast = new DToast(app.get());
toast.setView(app.get(), defStyle);
toast.setText(text);
toast.setDuration(Toast.LENGTH_SHORT);
toast.show();
}
clearToast()
方法如下,目的就是立即取消正在显示的“旧”Toast。
/**
* Clear an existing CusToast.
*/
private static void clearToast() {
if (toast != null) {
toast.cancel();
toast = null;
}
}
2.2 使用方法
首先,和AppToast一样,在自己项目的Application
类中初始化CusToast
库,方法也和AppToast类似。
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 初始化CusToast库(两种方式选其一)
// 方式1:初始化同时指定CusToast的默认显示样式
CusToast.init(this, CusToast.Style.RED);
// 方式2:初始化,使用默认显示样式
// CusToast.init(this);
}
}
之后就可以在代码中进行使用了,比如:
CusToast.showToast("Toast 1");
CusToast.showToast("Toast 3", Toast.LENGTH_LONG, CusToast.Style.LIGHT_RED);
DToast toast = CusToast.getToast("自定义Toast");
toast.setCusToastGravity(Gravity.CENTER, 0, 0)
.setTextSize(16)
.setStyle(CusToast.Style.GRAY_1)
.setTextColor(Color.WHITE)
// .setBackground(R.mipmap.ic_launcher)
// .setBackgroundColor(0xffff3444)
.setCusToastDuration(Toast.LENGTH_SHORT)
.show();
在此列举一下CusToast的几种内置样式。
Style | 预览 |
---|---|
DEFAULT | |
LIGHT_BLUE | |
LIGHT_RED | |
RED | |
LIGHT_GREEN | |
GREEN | |
LIGHT_YELLOW | |
YELLOW | |
GRAY_1 |
其他样式
样式 | 预览 |
---|---|
CusToastWithSub | |
CusToastWithIcon |
开源库、样例工程、详细文档下载地址:
liying2008/CusToast
该库已上传至jcenter仓库,使用Android Studio可以通过在线依赖引用的方式引入该库。
dependencies {
compile 'cc.duduhuo.custoast:custoast:0.2'
}