如何在外面点击时关闭PopupWindow?

时间:2014-01-25 15:42:20

标签: android

在我的某项活动中,有一个button,点击后会打开PopupWindow。 我的意图是,当PopupWindow打开并且用户点击屏幕上除弹出区域以外的任何地方时,PopupWindow应该被解雇。

为此我设置了:

// onClick()
myPopupWindow.setOutsideTouchable(true);
myPopupWindow.setFocusable(false);

问题是它运作良好&当我点击外面的任何地方时PopupWindow被解雇,但如果我点击生成此PopupWindow的按钮,那么该事件将被消耗,PopupWindow首先被关闭然后再次打开。

我尝试将我的按钮onclick()移至onTouch()。 但是,如果我return true,则按钮会消耗每个事件&一次又一次打开弹出窗口,即使在触摸屏幕时有轻微的阻力。 如果我return false,它的行为与onClick()&当按钮被触回时再次打开弹出窗口。

那么即使点击按钮,如何解除PopupWindow?

2 个答案:

答案 0 :(得分:2)

只需在单击按钮后禁用该按钮,以便在弹出窗口显示时无法单击该按钮。 button.setEnabled(false);

答案 1 :(得分:0)

我解决了类似的问题如下:

      settingsImageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!settingsMenu.isShowing()) {
                settingsMenu.showAsDropDown(settingsImageButton);
                settingsImageButton.setEnabled(false);
            }
        }
    });
    settingsMenu.setOnDismissListener(new PopupWindow.OnDismissListener() {
        @Override
        public void onDismiss() {
            new AsyncTask<Void, Void, String>() {
                @Override
                protected String doInBackground(Void... params) {
                    return null;
                }

                @Override
                protected void onPostExecute(String s) {
                    super.onPostExecute(s);
                    settingsImageButton.setEnabled(true);
                }
            }.execute();
        }
    });

我异步调用方法setEnabled(),因为onDismiss事件早于onClick事件。