1. 程式人生 > >Android 中關於吐司Toast帶文字和圖片的封裝。

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例項,大大減少了記憶體開銷。