最近用到PopupWindow,想达到点击某个按钮第一次让它显示,第二次是消失,点击PopupWindow外面也可以让它消失的方式,但是发现无论如何点击按钮,让它显示和消失popupwindow.isShowing()都是false,结果没辙了,只能问群里的哥们。现在问题是解决了,都是他帮忙的。
- 这是点击一个按钮,并在按钮下方显示popupwindow:
case R.id.amount:
if (invest_popup.isShowing()) {
invest_popup.dismiss();
} else {
int location[] = new int[2];
int tabLocation[] = new int[2];
amountbtn.getLocationOnScreen(location);
tablayout.getLocationOnScreen(tabLocation);
invest_popup.showAtLocation(amountbtn, Gravity.NO_GRAVITY, 0,
tabLocation[1] + tablayout.getHeight());
bgLayout.setVisibility(View.VISIBLE);
}
break;
下方是解决popupwindow显示和隐藏的关键代码 :
-
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (checkInteraptorTouch(invest_popup, ev)) {
return true;
}
if (checkInteraptorTouch(term_popup, ev)) {
return true;
}
if (checkInteraptorTouch(rate_popup, ev)) {
return true;
}
return super.dispatchTouchEvent(ev);
}private boolean checkInteraptorTouch(PopupWindow w, MotionEvent ev) {
if (w == null || ev == null || !w.isShowing()) {
return false;
}
View v = w.getContentView();
if (v == null) {
return false;
}
//
int[] xy = new int[2];
v.getLocationOnScreen(xy);
int tx = (int) ev.getX();
int ty = (int) ev.getY();
// 触摸点在对话框外围
if (xy[0] < tx && xy[1] < ty && tx > xy[0] + v.getWidth()
&& ty > xy[1] + v.getHeight()) {
return false;
} else {
w.dismiss();
return true;}
}