自定义吐司Toast(二)

Toast是Android中用来显示显示信息非常常用的一种方法,相信很多同学比仅仅满足于系统自带的吐司,于是乎就有自定义吐司这种需求了。
之前写了一篇自定义吐司Toast,全是吐的文字或者图片是写死的,介绍了Toast的位置。那么我发现很多带图片的我也想用Toast来显示。比如登录成功失败,显示个笑脸哭脸了什么的。

效果图

自定义过程中也发生了这样那样的问题,具体是什么就不啰嗦了,之后参考了Toast的源码来定义了一个。而且你会发现这个Toast不会发生我们用自带Toast的一种情况就是必须等前一个Toast消失了下一个才显示,当你多次快速点击时候会发现Toast不消失了,这里直接实现静态切换,Maybe 这也算稍微进阶点了吧。
直接贴源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

/**
* customize short toast.
*
* @param context
* @param message
* @param resId the resource id for imageView
*/
public static void showKevinToast(Context context, String message, int resId) {
if (mKevinShortToast == null) {
mKevinShortToast = new Toast(context);
}
LayoutInflater inflate = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflate.inflate(R.layout.layout_tip_toast, null);
mKevinShortToast.setView(v);
TextView tv = (TextView) v.findViewById(R.id.toast_text);
ImageView iv = (ImageView) v.findViewById(R.id.toast_image);
tv.setText(message);
iv.setImageResource(resId);
mKevinShortToast.setDuration(Toast.LENGTH_SHORT);
mKevinShortToast.show();
}

这里面也写了一些平时常用Toast的时候的简化,不用每次都写context,duration,show了,直接写showToast(“Android”)即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_one:
showToast("Hello", R.drawable.ic_moto);
break;
case R.id.btn_two:
showToast("Android", R.drawable.ic_rocket);
break;
case R.id.btn_three:
showToast("Android", R.drawable.ic_ship);
break;
case R.id.btn_four:
showToast2("Kevin\t" + ++count, R.drawable.ic_jewel);
break;
}
}

有需要的点击下面链接下载:

链接一

链接二