/** * Created by yss on 2018/4/23. * 自定义背景色 字体大小 颜色 内间距 显示时长 * 同一内容的Toast不重复弹窗 */ public class NoRepeatToast { private static NoRepeatToast instance; private NoRepeatToast() { } public static NoRepeatToast getInstance() { if (instance == null) { synchronized (NoRepeatToast.class) { if (instance == null) { instance = new NoRepeatToast(); } } } return instance; } // Toast.LENGTH_SHORT 2s LONG 3.5S private final int LENGTH_LONG_TIME = 3500; private final int LENGTH_SHORT_TIME = 2000; private final int MIN_TIME = 1000; //text size private final int TEXT_SIZE_DEFAULT = 14; //shape_padding private final int PADDING_DEFAULT = 12; private Toast currentToast; private String currentContent; private int textSize = TEXT_SIZE_DEFAULT; private int shapePadding = PADDING_DEFAULT; private int showTime = LENGTH_SHORT_TIME; private void show(Context context, String content) { if (TextUtils.isEmpty(content)) return; if (currentToast != null) { if (TextUtils.equals(content, currentContent)) { currentToast.show(); keepSameShowAndResetSchedule(showTime); return; } currentToast.cancel(); stopAllTask(); } if (Looper.myLooper() != Looper.getMainLooper()) { Looper.prepare(); currentToast = createCustomToast(context, content); currentToast.show(); currentContent = content; Looper.loop(); return; } currentToast = createCustomToast(context, content); currentToast.show(); currentContent = content; startShedule(context); stopSchedule(showTime); } /** * Activity 销毁 不再显示 */ public void cancle() { if (currentToast != null) { currentToast.cancel(); currentToast = null; } if (mHandler != null) { mHandler.removeCallbacksAndMessages(null); mHandler = null; } } private Toast createCustomToast(Context context, String content) { Toast customToast = Toast.makeText(context, content, Toast.LENGTH_SHORT); if (showTime == LENGTH_LONG_TIME) { customToast = Toast.makeText(context, content, Toast.LENGTH_LONG); } //view 可以通过 LayoutInflater.from(context).inflat(R.layout.yourview); TextView view = new TextView(context); view.setBackgroundResource(R.drawable.shape_toast_bg); view.setText(content); view.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize); float afterConvert = Utils.getTypeVauleByUnit(context, TypedValue.COMPLEX_UNIT_DIP, shapePadding); int padding = new Float(afterConvert).intValue(); view.setPadding(padding, padding, padding, padding); view.setTextColor(Color.WHITE); customToast.setView(view); customToast.setGravity(Gravity.CENTER, 0, -100); return customToast; } private void initDefaultConfig() { this.showTime = LENGTH_LONG_TIME; this.textSize = TEXT_SIZE_DEFAULT; this.shapePadding = PADDING_DEFAULT; } public void showLongTime(Context context, String content) { initDefaultConfig(); show(context, content); } public void showShortTime(Context context, String content) { initDefaultConfig(); show(context, content); } public void showSpecialType(Context context, String content, int time, int textSize, int shapePadding) { this.textSize = textSize; this.shapePadding = shapePadding; this.showTime = time; show(context, content); } private WeakRefHandler mHandler; private Runnable showTask; private Runnable cancelTask; private Runnable initShowTask() { Runnable task = new Runnable() { @Override public void run() { if (currentToast != null) { currentToast.show(); mHandler.postDelayed(showTask, 1000); } } }; return task; } private Runnable initCancelTask() { Runnable task = new Runnable() { @Override public void run() { if (currentToast != null) { currentToast.cancel(); } mHandler.removeCallbacksAndMessages(null); } }; return task; } private void startShedule(Context context) { if (showTime < MIN_TIME) return; if (mHandler == null) { initHandler(context); } showTask = initShowTask(); mHandler.post(showTask); } private void stopSchedule(int time) { if (showTime < MIN_TIME) return; cancelTask = initCancelTask(); mHandler.postDelayed(cancelTask, time); } private void keepSameShowAndResetSchedule(int time) { if (showTime < MIN_TIME) return; mHandler.removeCallbacksAndMessages(null); showTask = initShowTask(); cancelTask = initCancelTask(); mHandler.post(showTask); mHandler.postDelayed(cancelTask, time); } private void stopAllTask() { if (showTime < MIN_TIME) return; mHandler.removeCallbacksAndMessages(null); } private void initHandler(Context context) { if (mHandler == null) { mHandler = new WeakRefHandler(context) { @Override public void handleMessage(Message msg) { } }; } } }
Toast_P_PLUS
最新推荐文章于 2022-06-20 17:25:16 发布