popupWindow之添加控件后(如button,raidobutton等),点击popupWindow背景透明的BUG处理办法
如题:
今天开发中遇到popupWindow的一个bug,在popupWindow中添加了一个radioGroup,radioGroup中添加了两个radiobutton,两个radiobutton的样式都改成自己定义的了,在测试的时候发现了一个问题,在popupWindow中点击radiobutton的时候,点击的那一块背景变成透明的了,感觉非常恶心,发现时popupwindow.setBackgroundDrawable(new ColorDrawable())惹的祸,就四处寻找解决方法,发现只要popupWindow.setBackgroundDrawable(null)或者不要这句时点击时就没有问题。但是又引发了点击popupwindow外面和返回键popupwindow不消失问题,问题明确之后,用以下方法解决了此问题:
popupWindowSort.setBackgroundDrawable(null);
final View contentView = popupWindowSort.getContentView();
// 设置触摸事件
contentView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int x = (int) event.getX();
final int y = (int) event.getY();
if ((event.getAction() == MotionEvent.ACTION_DOWN) && ((x < 0) || (x >= popupWindowSort.getWidth()) || (y < 0) || (y >= popupWindowSort.getHeight()))) {
popupWindowSort.dismiss();
return true;
} else if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
popupWindowSort.dismiss();
return true;
} else {
return contentView.onTouchEvent(event);
}
}
});
用以上代码解决了点击popupwindow之外区域popupwindow不消失的问题,下面得解决响应返回键事件的问题:
View view = LayoutInflater.from(this).inflate(R.layout.layout_sort, null);//popupwindow的布局文件
view.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// 手机键盘上的返回键
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
popupWindowSort.dismiss();
break;
}
return false;
}
});
到此,用到以上两段代码终于成功解决了popupwindow的这个bug!