Android自定义弹框Dialog和Popupwindow的封装使用

来源:互联网 发布:真趣网络 蔡智 编辑:程序博客网 时间:2024/05/21 11:34

在项目开发中,经常会遇到各种通过弹框提示信息的需求,主要都是通过Dialog或者PopupWindow,由于在项目中可能需要多次用到,于是自己重写了2个类方便随时调用。

自定义Dialog类:

public abstract class CustomBaseDialog extends Dialog implements        android.view.View.OnClickListener {    /**     * 布局文件     */    public int layoutResID;    public CustomBaseDialog(Context context, int layoutResID) {        super(context);        this.layoutResID = layoutResID;    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        getWindow().setBackgroundDrawableResource(android.R.color.transparent);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(layoutResID);        setCanceledOnTouchOutside(false);        Window w = getWindow();        w.setWindowAnimations(R.style.PopupAnimation);        init();    }    /**     * @author xc     * @date 2016-3-31 下午2:43:15     * @describe 初始化控件和填充数据     */    public abstract void init();}
自定义PopupWindow类:

public abstract class CustomBasePopupWindow extends PopupWindow{    /**     * 布局文件     */    private PopupWindow mPreviewPopup;    private View view;    /**     * @param context 上下文     * @param layoutResID 布局文件     * @param width 窗口宽度     * @param height 窗口高度     */    public CustomBasePopupWindow(Context context, int layoutResID, int width, int height) {        mPreviewPopup = new PopupWindow(context);        view = LayoutInflater.from(context).inflate(layoutResID, null);        mPreviewPopup.setWidth(width);        mPreviewPopup.setHeight(height);        mPreviewPopup.setContentView(view);        mPreviewPopup.setBackgroundDrawable(new ColorDrawable(0x00000000));    }    /**     * @param x 显示位置所在x坐标     * @param y 显示位置所在y坐标     */    public void show(int x, int y) {        mPreviewPopup.showAtLocation(view, Gravity.NO_GRAVITY, x, y);    }    /**     * 关闭     */    public void dismiss() {        if (mPreviewPopup != null) {            mPreviewPopup.dismiss();        }    }    /**     * 当点击外部不消失窗口,并且能相应外部控件的点击事件     */    public void setPopupWindowTouchModal(boolean touchModal) {        if (null == mPreviewPopup) {            return;        }        Method method;        try {            method = PopupWindow.class.getDeclaredMethod("setTouchModal", boolean.class);            method.setAccessible(true);            method.invoke(mPreviewPopup, touchModal);        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * @author xc     * @date 2016-3-31 下午2:43:15     * @describe 初始化需要更新数据或者处理点击事件的控件     */    public abstract void init();}



1 0
原创粉丝点击