Android 中關於吐司Toast帶文字和圖片的封裝。
阿新 • • 發佈:2019-01-28
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 = newImageView(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 classToastUtil { 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例項,大大減少了記憶體開銷。