gpt4 book ai didi

android - 如何以编程方式检查我的 Activity 菜单是否在特定时刻显示?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:18:07 25 4
gpt4 key购买 nike

Android 设备配置更改(例如“将硬键盘滑回”)将始终调用 PhoneWindow.onConfigurationChanged(),而后者又将调用 reopenMenu()。如果正在显示,这将导致重新打开当前运行的 Activity 的菜单。

我在我的 onPrepareOptionsMenu() 重写中实现了我的菜单锁定。用户每次想要查看菜单时都必须输入代码。我不希望用户被要求再次输入代码,而菜单仍然存在只是因为配置更改。因此,我想知道,有什么方法可以检查当前前台 Activity 的菜单是否已经显示?知道这一点后,如果菜单已经打开,我就可以绕过询问访问代码。

我的自定义解决方法实现是使用我自己的标记 menuShowing,我在 onPrepareOptionsMenu 中设置并在 onOptionsItemSelected 中重置onKeyDown 如果单击后退按钮。

编辑: 屏幕方向配置更改似乎不会触发此行为。然而,硬键盘滑盖可以。

最佳答案

在有人提出更好的“一次调用”答案之前,这是我在问题中提到的自定义解决方法实现,在 Sam 的提示的帮助下,以防有人需要相同的功能:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if (showingMenu) {
// The menu button was clicked or the hard keyboard was
// slid open/closed while the menu was already showing
return true;
}
// Otherwise, either the menu was clicked or openOptionsMenu() was called
if (codeEntered) {
// Code was entered and then openOptionsMenu() was called
showingMenu = true;
// Menu will now be shown
return true;
} else {
// The menu button was clicked, ask for code
askForCode();
// Don't show menu yet
return false;
}
}

@Override
public void onOptionsMenuClosed(Menu menu) {
showingMenu = false;
codeEntered = false;
}

private void askForCode() {
codeEntered = getUserInput();
if (codeEntered)
openOptionsMenu();
}

getUserInput() 实际上是在 AlertDialog 和带有附加 TextWatcherEditText 的帮助下发生的,但是除非有人感兴趣,否则实现细节超出了这个问题的范围。

关于android - 如何以编程方式检查我的 Activity 菜单是否在特定时刻显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10542973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com