最近有个项目,用到了popupwindow,还是在一个activity中用到了多个popupwindow,这就是涉及到popupwindow间的切换了。但每次弹出popupwindow后,想通过点击外部控件进行进行popupwindow间的切换,会发现点击外部控件的时候,只响应了隐藏当前popupwindow的事件,外部控件的点击事件并没有执行,需再次点击外部控件,才弹出popupwindow,这主要是焦点导致的,因为弹框焦点默认设置的是true,所以点击其他按钮,不会触发其他按钮对应的事件,因为焦点不在那个按钮上。所以只要设置成false就好了。
代码如下: 注意要在显示前加上popupWindow.setFocusable(false);设置不获取焦点
PopupWindow popupWindow = new PopupWindow(popupWindow_view, 200,LayoutParams.MATCH_PARENT, true);
popupWindow.setWidth(500);
popupWindow.setFocusable(false); // 设置PopupWindow不获得焦点
int[] location = new int[2];
// 这里是位置显示方式,在屏幕的左侧
popupWindow.showAtLocation(view, Gravity.NO_GRAVITY,location[0] + view.getWidth(), location[1]);
// 添加监听
View popupWindow_view.setFocusableInTouchMode(true);
popupWindow.setOutsideTouchable(true);
// // 点击其他地方消失
popupWindow_view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if (popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
popupWindow = null;
}
return false;
}
});
这样,在点击外部控件时,会先关闭当前popupwindow再执行外部控件的点击事件,其实就是一个获取焦点的问题,并不像网上说的那么麻烦。