package com.ectrip.cyt.utils; import android.app.Activity; import android.content.Context; import android.content.ContextWrapper; import android.os.Handler; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.widget.PopupWindow; import android.widget.TextView; import com.ectrip.trips.check.R; /** * Created by dc on 2017/3/9. */ public class ToastUtils { public static final int LENGTH_LONG = 1; public static final int LENGTH_SHORT = 0; private static ToastUtils toastUtils; private static View layout2; private static TextView tv_info; private static Activity mActivity; private static Handler handler; private static Runnable runnable; private static PopupWindow popupWindow2; public static ToastUtils with(Activity activity) { mActivity = activity; layout2 = LayoutInflater.from(activity).inflate( R.layout.toastutils_view, null); tv_info = (TextView) layout2.findViewById(R.id.poptext); if (handler == null) { handler = new Handler(); } if (runnable == null) { runnable = new Runnable() { @Override public void run() { if (popupWindow2 != null) { popupWindow2.dismiss(); popupWindow2 = null; } } }; } if (popupWindow2 != null) { if (handler != null && runnable != null) { handler.removeCallbacks(runnable); } popupWindow2.dismiss(); popupWindow2 = null; } popupWindow2 = new PopupWindow(layout2); if (toastUtils == null) { toastUtils = new ToastUtils(); } return toastUtils; } /** * @param text 提示信息 * @param resource 显示的布局界面 * @param duration 显示时长设置 */ public void makeText(String text, int resource, int duration) { // 设置弹框的宽度为屏幕宽度 popupWindow2.setWidth(DenstityUtils.getScreenWidth(mActivity)); popupWindow2.setHeight(DenstityUtils.dp2px(mActivity, 80)); // 设置显示消失的动画 popupWindow2.setAnimationStyle(R.style.TopSelectAnimationShow); // 设置点击弹框外部,弹框不消失 popupWindow2.setOutsideTouchable(false); popupWindow2.setFocusable(false); popupWindow2.setContentView(layout2); // 设置弹框出现的位置,在v的正下方横轴偏移textview的宽度,为了对齐~纵轴不偏移 if (popupWindow2.isShowing()) { // popupWindow2.dismiss(); } try { popupWindow2.showAtLocation(LayoutInflater.from(mActivity).inflate(resource, null), Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0); } catch (Exception e) { e.printStackTrace(); } tv_info.setText(text); // 显示时长 long time; if (duration == LENGTH_LONG) { time = 3500; } else if (duration == LENGTH_SHORT) { time = 1000; } else { time = 1500; } handler.postDelayed(runnable, time); } public static void toast(final Activity activity, final String msg, final int resourt) { activity.runOnUiThread(new Runnable() { @Override public void run() { try { with(activity).makeText(msg, resourt, LENGTH_SHORT); } catch (Exception e) { e.printStackTrace(); } } }); } public static void toast(final Context mContext, final String msg) { final Activity mActivity = getActivity(mContext); if (mActivity != null) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { try { with(mActivity).makeText(msg, R.layout.app_welcome, 2); } catch (Exception e) { } } }); } } private static Activity getActivity(Context mContext) { if (mContext instanceof Activity) { return (Activity) mContext; } else if (mContext instanceof ContextWrapper) { mContext = ((ContextWrapper) mContext).getBaseContext(); return getActivity(mContext); } else { return null; } } }