在项目中遇到,图片下载的方法封装在imageUtils类中,下载要用Toast到提醒。如果在activity中可以用runOnUiThread和Handler来显示提醒,现在不是在activity,又不想在imageUtils中用Handler。所以想到如果有个全局的Toast就方便多了。
先上效果图:
Toast.gif
全局Toast:
1. 支持默认格式,自上向下布局为ImageView,TextView,TextView,三个控件可以自由组合显示或隐藏
2. 支持Top,Center,Bottom的位置显示
3. 支持多样的显示格式,可以传入自定义的layout的View
4. 共用一个Toast对象,防止多次Toast重叠并显示时间累加,该控件近保留最后一次的设置和显示。
5. 最好在自定义的Application中new该Toast,Activity,Fragment,Adapter中都可以直接调用。
自定义Toast代码如下, 用静态内部类Builder设置Toast的样式:
public class FlexibleToast {
public static final int GRAVITY_BOTTOM = 0;
public static final int GRAVITY_CENTER = 1;
public static final int GRAVITY_TOP = 2;
public static final int TOAST_SHORT = 0;
public static final int TOAST_LONG = 1;
private Context mContext;
private Toast flexibleToast;
public void toastShow(Builder builder) {
if (flexibleToast == null) {
flexibleToast = new Toast(mContext);
}
// toast position
if (builder.mGravity == GRAVITY_CENTER) {
flexibleToast.setGravity(Gravity.CENTER | Gravity.CENTER_VERTICAL, 0, 0);
} else if (builder.mGravity == GRAVITY_TOP) {
flexibleToast.setGravity(Gravity.TOP | Gravity.CENTER_VERTICAL, 0, Tools.dip2px(mContext, 20));
} else {
flexibleToast.setGravity(Gravity.BOTTOM | Gravity.CENTER_VERTICAL, 0, Tools.dip2px(mContext, 20));
}
if (builder.mDuration == TOAST_LONG) {
flexibleToast.setDuration(Toast.LENGTH_LONG);
} else {
flexibleToast.setDuration(Toast.LENGTH_SHORT);
}
if (builder.hasCustomerView && builder.mCustomerView != null) {
flexibleToast.setView(builder.mCustomerView);
} else {
flexibleTo