怎么点击popwindow之外让popwindow隐藏

关于这个问题,网上有很多例子,都是处理popwindow所依附的activity或fragment的touch事件。当然,通常情况都可以处理。

但是当在我的项目中加入了开源组件slidingmenu后,发现touch事件不能被正常触发了,这个时候该怎么办?

解决办法:定义PopupWindow水平和垂直都是MATCH_PARENT,然后设置监听PopupWindow的view点击事件,在该事件中关闭PopupWindow显示

缺点:popwindow所依附的activity或fragment没有任何点击或者触摸事件了。因为当前已经被PopupWindow 的view完全覆盖。

附上主要代码:

/**
	 * 初始化功能菜单
	 */
	public void initPopMenu() {
		menuPopWindow = new PopupWindow(menuWindow, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, true);
		menuPopWindow.setOutsideTouchable(true);
		menuPopWindow.setFocusable(false);
		menuPopWindow.setAnimationStyle(R.style.AnimationPreview);
		menuPopWindow.update();
	}

	private boolean togglePopMenu() {
		if (menuPopWindow != null && menuPopWindow.isShowing()) {
			menuPopWindow.dismiss();
			return false;
		}
		else {
			menuPopWindow.showAtLocation(view, Gravity.RIGHT | Gravity.TOP, 0, 0);
			return true;
		}
	}


private void initPopMenuView(LayoutInflater inflater) {
		menuWindow = inflater.inflate(R.layout.pop_carmanage_menu, null);
		Button btn_search, btn_refresh, btn_add, btn_scan, btn_ok;
		btn_search = (Button) menuWindow.findViewById(R.id.btn_search);
		btn_refresh = (Button) menuWindow.findViewById(R.id.btn_refresh);
		btn_add = (Button) menuWindow.findViewById(R.id.btn_add);
		btn_scan = (Button) menuWindow.findViewById(R.id.btn_scan);
		btn_ok = (Button) menuWindow.findViewById(R.id.btn_ok);
		btn_search.setOnClickListener(this);
		btn_refresh.setOnClickListener(this);
		btn_add.setOnClickListener(this);
		btn_scan.setOnClickListener(this);
		btn_ok.setOnClickListener(this);
		initPopMenu();
		menuWindow.setOnTouchListener(new OnTouchListener() {

			@Override
			public boolean onTouch(View v, MotionEvent event) {
				if (!togglePopMenu()) { return true; }
				return false;
			}

		});
	}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值