如题:
今天开发中遇到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!