1. 方法一

    1
    2
    3
    mPopupWindow.setBackgroundDrawable(new BitmapDrawable()); //这个BitmapDrawable废弃了可以用下面的这个
    //mPopupWindow.setBackgroundDrawable(new BitmapDrawable(context.getResources(), (Bitmap) null));
    mPopupWindow.setOutsideTouchable(true);
  2. 监听Activity的OnTouchEvent

1
2
3
4
5
6
7
8
@Override
public boolean onTouchEvent(MotionEvent event) {
if (popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
//popupWindow = null;
}
return super.onTouchEvent(event);
}

点击空白处的时候让PopupWindow消失的一点说明

关于PopupWindow最搞笑的地方是setOutsideTouchable方法,原本以为如果你setOutsideTouchable(true)则点击PopupWindow之外的地方PopupWindow会消失,其实这玩意儿好像一点用都没有。

要让点击PopupWindow之外的地方PopupWindow消失你需要调用setBackgroundDrawable(new BitmapDrawable());

设置背景,为了不影响样式,这个背景是空的。还可以这样写,觉得这样要保险些:

setBackgroundDrawable(new ColorDrawable(0x00000000));

背景不为空但是完全透明。如此设置还能让PopupWindow在点击back的时候消失。其实一直觉得很奇怪,不明白为什么一个背景会影响点击事件,只知道这样用可