一、方法一:
popupWindow.setFocusable(false); //这样popupWindow无法获得焦点,无法处理popupWindow中的事件
设置MainActivity的onTouchEvent是点击的时候关闭popupwindow(dismiss方法)
该方法的缺点如注释所写
二、方法二:
popupwindow.setFocusable(true);
popupWindow.setBackgroundDrawable(new PaintDrawable());
该方法能使popupwindow获得焦点,且点击其他地方popupwindow消失,使用返回键也同样。
另外一种设置监听popupwindow里面view的key事件。返回键来处理。
setBackgroundDrawable方法可以初步理解为设定popupwindow的背景,因为就算在xml里面设置了背景,程序也认为没有。所以得设置为空背景,类似与初始化吧。
另外,这几种解决方案都是基于一点,想要处理某个事件,必须先能监听到该事件,而要监听到该事件,前提是该对象得获得焦点。分清楚各个不同的对象层次是处理问题的关键。这些方案中涉及到的对象有mainactivity、popupwindow、已经popupwindow的view(所以在监听这个的按键事件的时候应该也设置该对象focusable,以及FocusableInTouchMode)