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

最近用到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;

      }

     }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值