Android 中关于吐司Toast带文字和图片的封装。

Android中我们常用的提示功能就是Toast了,最近使用Toast的时候出现了一些不可预料的错误,分析才发现是由Toast实例太多引起导致,所以基于系统Toast封装了带图片和文字Toast,并且永远只有一个Toast实例,大大减少了内存开销。


实现思路:

1,关于如何实现只带文字显示,事先判断当前Toast是否存在,如果不存在我们才获取Toast实例,如果存在就直接设置text,实现如下:

if (mToast == null) {
    mToast = Toast.makeText(mContext, content, Toast.LENGTH_SHORT);
} else {
    mToast.setText(content);
}

2,关于如何实现带图片和文字显示,原理和文字显示差不多,也是先判断当前要得到的Toast是否存在,如果存在就直接设置相关图片和文字,实现如下:

if (mToast == null) {
    mToast = Toast.makeText(mContext, text, Toast.LENGTH_SHORT);
} else {
    mToast.setText(text);
}

LinearLayout view = (LinearLayout) mToast.getView();
if (mIv == null) {
    mIv = new ImageView(mContext);
}
mIv.setImageResource(resImag);
if (view.getChildCount() != 1) {
    view.removeViewAt(1);
}
view.addView(mIv);

其中如果不加view.getChildCount()!=1这个判断,当我们点击的时候上一次设置的图片依然会弹出来,就是图片会一直追加,所以增加了这样一个判断,每次设置图片的时候,如果存在图片就先移除再add图片。


完整代码如下:

/**
 * 吐司工具类
 * Created by STRUGGLE on 2018/4/27.
 */

public class ToastUtil {
    private static Context mContext;
    private static ImageView mIv;
    private static Toast mToast;

    /**
     * 只显示文字吐司
     *
     * @param mContext
     */
    public static void setContext(Context mContext) {
        ToastUtil.mContext = mContext;
    }

    public static void show(String content) {
        if (mToast == null) {
            mToast = Toast.makeText(mContext, content, Toast.LENGTH_SHORT);
        } else {
            mToast.setText(content);
        }

        mToast.setGravity(Gravity.CENTER, 0, 0);
        mToast.show();
    }

    /**
     * 显示带图片文字的吐司
     *
     * @param text
     * @param resImag
     */
    public static void show(String text, int resImag) {
        if (mToast == null) {
            mToast = Toast.makeText(mContext, text, Toast.LENGTH_SHORT);
        } else {
            mToast.setText(text);
        }

        LinearLayout view = (LinearLayout) mToast.getView();
        if (mIv == null) {
            mIv = new ImageView(mContext);
        }
        mIv.setImageResource(resImag);
        if (view.getChildCount() != 1) {
            view.removeViewAt(1);
        }
        view.addView(mIv);
        mToast.show();
    }
}
 

这样封装后,无论调用多少次Toast,就只会存在一个Toast实例,大大减少了内存开销。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值