问题:
使用popupWindow做下拉筛选框,往往需要做点击外部消失的效果,
错误示范:
popupWindow.setBackgroundDrawable(new ColorDrawable(maskColor));
popupWindow.setOutsideTouchable(true);
做上面的设置后,点击外部消失的效果达到了,但是在显示popupWindow的状态下点击触发popupWindow弹窗的按钮时,弹窗会瞬间消失再显示,极不和谐。
正确的处理方式:
popupWindow.setBackgroundDrawable(new ColorDrawable(maskColor));
popupWindow.setOutsideTouchable(true);
popupWindow.setTouchInterceptor((v, event) -> {
Rect tabRect = new Rect();
//menuView是触发popupWindow弹窗的布局
menuView.getGlobalVisibleRect(tabRect);
if (tabRect.contains((int)event.getRawX(),(int)event.getRawY())) {
v.performClick();
//返回true表示拦截touch事件,说明你在此处消费掉touch事件
return true;
}
//返回false表示你没处理touch事件,事件会继续往下分发
return false;
});
当用户点击触发popupWindow的按钮时,消费掉点击事件,popupWindow就不会消失再显示了;自己在点击事件里做好判断逻辑就可以了。