Android PopupWindow简单使用

Android开发会用到各种类型的弹框,我现在常用的就是MaterialDialog和Dialog,但有些时候Dialog不能满足项目的需求,这时候用PopupWindow效果会更好些。

1、初始化PopupWindow对象
     private PopupWindow mPopupWindow;

     /**
     * 初始化popupWindow
     */
      private void initPopuptWindow() {
        View pop_view = View.inflate(getActivity(), R.layout.dialog_loan_type, null);
        pop_view.findViewById(R.id.linear_out).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mPopupWindow.dismiss();
            }
        });
    
        mPopupWindow = new PopupWindow(pop_view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        mPopupWindow.setFocusable(true);//设置pw中的控件能够获取焦点
        ColorDrawable dw = new ColorDrawable(0xb0000000);
        mPopupWindow.setBackgroundDrawable(dw);//设置mPopupWindow背景颜色或图片,这里设置半透明
        mPopupWindow.setOutsideTouchable(true); //设置可以通过点击mPopupWindow外部关闭mPopupWindow
        mPopupWindow.setAnimationStyle(R.style.PopupAnimationAmount);//设置mPopupWindow的进出动画
        mPopupWindow.update();//刷新mPopupWindow
        mPopupWindow.showAsDropDown(mLinearMenu, 0, 0);//mPopupWindow显示的位置

        /**
         * PopupWindow消失监听方法
         */
        mPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
            @Override
            public void onDismiss() {
               
            }
        });
    }

2、使用PopupWindow

@OnClick({R.id.relative_amount, R.id.relative_lable})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.relative_amount: 
                getPopupWindow();
                break;
            case R.id.relative_lable:
                getPopupWindow();
                break;
        }
    }

 private void getPopupWindow() {
        if (null != mPopupWindow && mPopupWindow.isShowing()) {
            mPopupWindow.dismiss();
            return;
        } else {
            initPopuptWindow();
        }
    }

最终效果图:

Android PopupWindow简单使用_第1张图片
qqqq.jpg

7.0以上版本显示位置适配问题:
使用showAsDropDown()显示位置在7.0以上版本无效,这里给出的解决办法是在7.0以上的版本使用showAtLocation()的方法显示位置

    @Override
    public void showAsDropDown(View anchor) {
        if (Build.VERSION.SDK_INT >= 24){
            Rect rect = new Rect();
            anchor.getGlobalVisibleRect(rect);
            int h = anchor.getResources().getDisplayMetrics().heightPixels - rect.bottom;
            setHeight(h);
        }
        super.showAsDropDown(anchor);
    }

你可能感兴趣的:(Android PopupWindow简单使用)