android PopupWindow 외부 클릭 하여 pop 을 사라 지게 하지만 외부 view 에 응답 하지 않 습 니 다.

3824 단어
popupWindow 에 대한 자세 한 정보: 이 링크 를 보십시오. 원본 에서 PopupWindow 호 환 Android 6.0 이상 버 전 을 분석 하고 외부 에서 사라 지지 않 으 려 면 누 르 십시오.
//     
// findLayout();          ,     xml      
final LinearLayout va = findLayout();
        if (mPopupWindow == null) {
            mPopupWindow = new PopupWindow(va.getContext());
        }
        mPopupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
        mPopupWindow.setHeight(FrameLayout.LayoutParams.WRAP_CONTENT);
        mPopupWindow.setContentView(va);
        //   PopupWindow   
        mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        //   PopupWindow           
        mPopupWindow.setOutsideTouchable(true);
        mPopupWindow.setTouchable(true);
        mPopupWindow.setFocusable(true); // pop    ,      view       

        if (mPopupWindow.getContentView() != null) {
            mPopupWindow.getContentView().setOnKeyListener(new View.OnKeyListener() {
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if (keyCode == KeyEvent.KEYCODE_BACK) {
                        hidePopupWindow();
                        if (cancelListener != null) {
                            cancelListener.cancel(v);
                        }
                        return true;
                    }
                    return false;
                }
            });
        }
        //     
        if (animationStyle > 0) {
            mPopupWindow.setAnimationStyle(animationStyle);
        }
        //             
        mPopupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        // window.showAsDropDown(v);
        //   popupWindow     ,                  
        mPopupWindow.showAtLocation(button, Gravity.BOTTOM
                | Gravity.CENTER_HORIZONTAL, 0, 0);

핵심 코드:
//   PopupWindow   
mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//   PopupWindow           
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.setTouchable(true);
mPopupWindow.setFocusable(true); // pop    ,      view       

이 네 문장 을 하나 넣 으 면 할 수 있 습 니 다. 외부 view 를 클릭 할 때 pop 이 사라 지고 외부 view 가 응답 하지 않 습 니 다.
팝 이 사라 지고 외부 view 가 응답 하려 면 mPopupWindow.setFocusable(true); 이 문장 을 삭제 합 니 다.

좋은 웹페이지 즐겨찾기