如何关闭弹出窗口onClick按钮和android中的onTouch外部

时间:2015-08-26 05:37:38

标签: android popupwindow

我试过以下

popupMoreWindow.setBackgroundDrawable(new BitmapDrawable());
popupMoreWindow.setOutsideTouchable(true);

if(popupOpened) {
    popupMoreWindow.dismiss();
    popupOpened = false;
} else {
    popupMoreWindow.showAsDropDown(custLookUpRowowHolder.btnMore, 150, 5);
    popupOpened = true;
}
  • 它正在关闭弹出窗口,但不适用于按钮onClick。

1 个答案:

答案 0 :(得分:0)

  • 要点击按钮关闭弹出窗口,点击外部,请按照以下步骤

    1. 触摸拦截器并在动作为MotionEvent时关闭弹出窗口。 ACTION_OUTSIDE使用setFocusable(true)将弹出窗口设置为可聚焦

    2. 设置可聚焦可确保弹出窗口可以抓取外部触摸事件,因为它还可以捕获菜单项或按钮上的单击,它确保弹出窗口不会再次启动(如果已经显示)。

      < / LI>
    3. 满足您要求的代码段应如下所示。

     btn.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {

                    @Override
                    public boolean onMenuItemClick(MenuItem item) {         

                        if (window == null) {
                                View contentView = getLayoutInflater(null).inflate(R.layout.popup_menu, null);
                                window = new PopupWindow(contentView, ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT);
                                window.setBackgroundDrawable(new BitmapDrawable(getResources(), ""));               


                                window.setOutsideTouchable(true);
                                window.setFocusable(true);
                                window.setTouchInterceptor(new View.OnTouchListener() {
                                    @Override
                                    public boolean onTouch(View v, MotionEvent event) {
                                        if(event.getAction()==MotionEvent.ACTION_OUTSIDE){
                                            window.dismiss();
                                            return true;
                                        }
                                        return false;
                                    }
                                });
                       }        
                            window.showAsDropDown(getActivity().findViewById(R.id.action_open_popup));
                            return true;
                        }
                    });

`