在我的某项活动中,有一个button
,点击后会打开PopupWindow
。
我的意图是,当PopupWindow打开并且用户点击屏幕上除弹出区域以外的任何地方时,PopupWindow应该被解雇。
为此我设置了:
// onClick()
myPopupWindow.setOutsideTouchable(true);
myPopupWindow.setFocusable(false);
问题是它运作良好&当我点击外面的任何地方时PopupWindow被解雇,但如果我点击生成此PopupWindow的按钮,那么该事件将被消耗,PopupWindow首先被关闭然后再次打开。
我尝试将我的按钮onclick()
移至onTouch()
。
但是,如果我return true
,则按钮会消耗每个事件&一次又一次打开弹出窗口,即使在触摸屏幕时有轻微的阻力。
如果我return false
,它的行为与onClick()&当按钮被触回时再次打开弹出窗口。
那么即使点击按钮,如何解除PopupWindow?
答案 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事件。