请问这样弹出PopupWindow,怎么可以弹出时让外部控件不可点击?网上查了好多方法都不行.

    private void showLoading() {
        //TODO:bug:目前弹出window时可以点击外部控件
        View typeWindow = LayoutInflater.from(mContext).inflate(R.layout.loading, null);
        rlLoading = typeWindow.findViewById(R.id.rl_loading);
        mPopupWindow = new PopupWindow(typeWindow, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        mPopupWindow.setOutsideTouchable(false);
        mPopupWindow.setFocusable(false);
//        mPopupWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));
        mPopupWindow.showAtLocation(view.findViewById(R.id.rl_login), Gravity.CENTER, 0, 0); //popupwindow弹出的位置
        WindowManager.LayoutParams lpType = mWindow.getAttributes(); // 设置背景颜色变暗
        lpType.alpha = 0.7f;
        mWindow.setAttributes(lpType);
        mPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
            @Override
            public void onDismiss() {
                WindowManager.LayoutParams lp = mWindow.getAttributes();
                lp.alpha = 1f;
                mWindow.setAttributes(lp);
            }
        });
    }
阅读 4.9k
2 个回答

大概设置下这个就可以了

        popupWindow.setOutsideTouchable(true);
        popupWindow.setFocusable(true);
        //点击外部,popWindow消失
        popupWindow.setTouchInterceptor(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction()==MotionEvent.ACTION_OUTSIDE){
                    performClick();
                    popupWindow.dismiss();
                    return true;
                }
                return false;
            }
        });

我这里的做法是,设置Pop全屏
添加半透明背景覆盖Activity/Fragment视图
给pop背景添加点击事件,点击事件不做任何事情

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题