package com.arialyy.frame.core; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.PopupWindow; import com.arialyy.frame.module.AbsModule; import com.arialyy.frame.module.IOCProxy; import com.arialyy.frame.util.StringUtil; import butterknife.ButterKnife; /** * Created by lyy on 2015/12/3. * 抽象的Popupwindow悬浮框 */ public abstract class AbsPopupWindow extends PopupWindow { protected String TAG; private static Context mContext; private Drawable mBackground; protected View mView; private Object mObj; protected IOCProxy mProxy; protected DialogSimpleModule mSimpleModule; private ModuleFactory mModuleF; public AbsPopupWindow(Context context) { this(context, null); } public AbsPopupWindow(Context context, Drawable background) { this(context, background, null); } public AbsPopupWindow(Context context, Drawable background, Object obj) { mContext = context; mBackground = background; initPopupWindow(); mProxy = IOCProxy.newInstance(this); if (obj != null) { mObj = obj; mSimpleModule = new DialogSimpleModule(getContext()); IOCProxy.newInstance(mObj, mSimpleModule); } mModuleF = ModuleFactory.newInstance(); init(); } protected void init() { } private void initPopupWindow() { mView = LayoutInflater.from(mContext).inflate(setLayoutId(), null); setContentView(mView); ButterKnife.inject(this, mView); TAG = StringUtil.getClassName(this); // 设置SelectPicPopupWindow弹出窗体的宽 setWidth(ViewGroup.LayoutParams.MATCH_PARENT); // 设置SelectPicPopupWindow弹出窗体的高 setHeight(ViewGroup.LayoutParams.MATCH_PARENT); setFocusable(true); // 设置SelectPicPopupWindow弹出窗体动画效果 // setAnimationStyle(R.style.wisdom_anim_style); // 实例化一个ColorDrawable颜色为半透明 if (mBackground == null) { mBackground = new ColorDrawable(Color.parseColor("#7f000000")); } // 设置SelectPicPopupWindow弹出窗体的背景 setBackgroundDrawable(mBackground); } protected <T extends View> T getViewWithTag(Object tag) { T result = (T) mView.findViewWithTag(tag); if (result == null) throw new NullPointerException("没有找到tag为【" + tag + "】的控件"); return result; } /** * 获取Module * * @param clazz {@link AbsModule} */ protected <M extends AbsModule> M getModule(Class<M> clazz) { M module = mModuleF.getModule(getContext(), clazz); mProxy.changeModule(module); return module; } /** * 获取Module * * @param clazz Module class0 * @param callback Module回调函数 * @param <M> {@link AbsModule} * @return */ protected <M extends AbsModule> M getModule(@NonNull Class<M> clazz, @NonNull AbsModule.OnCallback callback) { M module = mModuleF.getModule(getContext(), clazz); module.setCallback(callback); mProxy.changeModule(module); return module; } /** * 获取简单打Moduel回调,这个一般用于回调数据给寄主 */ protected DialogSimpleModule getSimplerModule() { if (mObj == null) { throw new NullPointerException("必须设置寄主对象"); } return mSimpleModule; } public Context getContext() { return mContext; } /** * 设置资源布局 * * @return */ protected abstract int setLayoutId(); /** * 数据回调 */ protected abstract void dataCallback(int result, Object obj); }