gpt4 book ai didi

android - 按下选项菜单时关闭弹出窗口

转载 作者:行者123 更新时间:2023-11-29 18:08:46 24 4
gpt4 key购买 nike

我实现了一个当我按下硬件菜单键时显示的弹出窗口。现在我想在再次按下菜单键时关闭弹出窗口。

我试过了

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_MENU) {
if (pw.isShowing()) {
pw.dismiss();
} else {
openpopup();
}
return true;
}

return super.onKeyDown(keyCode, event);
}

这里是打开弹窗的方法

public void openpop() {
View view1 = getCurrentFocus();
showpopup(view1);
}

这里是showpopup方法

public void showpopup(View view) {

pw.setTouchable(true);
pw.setFocusable(true);
pw.setTouchInterceptor(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
pw.dismiss();

return true;
}

return false;
}
});

try {
pw.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
pw.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
pw.setOutsideTouchable(false);
pw.setContentView(popupView);
pw.showAsDropDown(view, 0, 0);
popUpShowed = true;
} catch (Exception e) {
Log.e("SAMPLE", "Exception", e);
}

}

但是当我按下菜单时,弹出窗口并没有消失。

可能是什么问题?我需要以某种方式完成这件事。请帮帮我。

最佳答案

显然,第二次按菜单键不会触发。
找到here the solution .
希望对您有所帮助。

编辑:
检查并创建了另一种方法。应该这样做:

boolean open = false;
boolean itemSelected = false;

@Override
public boolean onMenuOpened(int featureId, Menu menu) {

if(!open || itemSelected) {
showPopup();
open = true;
itemSelected = false;
}
return false;
}

@Override
public void onPanelClosed(int featureId, Menu menu) {
if (open && !itemSelected) {
closePopup();
open = false;
}
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
itemSelected = true;
return false;
}

适用于 Android 4.0.3。显然 onPrepareOptionsMenu 在 v3 之后改变了功能。

关于android - 按下选项菜单时关闭弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11946797/

24 4 0