解决PopupWindow实现按钮点击消失和显示,以及点击它外围可以消失的方法

来源:互联网 发布:逆战刷枪软件手机安卓 编辑:程序博客网 时间:2024/04/25 18:52

最近用到PopupWindow,想达到点击某个按钮第一次让它显示,第二次是消失,点击PopupWindow外面也可以让它消失的方式,但是发现无论如何点击按钮,让它显示和消失popupwindow.isShowing()都是false,结果没辙了,只能问群里的哥们。现在问题是解决了,都是他帮忙的。

  1. 这是点击一个按钮,并在按钮下方显示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显示和隐藏的关键代码 :

  1.  @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;

      }

     }

 

0 0
原创粉丝点击