androidx.appcompat.app.AppCompatActivity#closeOptionsMenu 不关闭菜单
androidx.appcompat.app.AppCompatActivity#closeOptionsMenu doesn't close the menu
我正在使用单击菜单打开底部 sheet。
最初实施时,只是从 AppCompatActivity#onMenuOpened
返回 false
并没有完成这项工作。
我看到有人 complained about this 5 年前。
所以我添加了一个对 AppCompatActivity#closeOptionsMenu
的调用并且成功了。
我更新了我的应用以支持 API 级别 30,但现在我发现它不起作用。 (不知道是不是和API30有关,还是之前坏了我没注意到)
这是AppCompatActivity#closeOptionsMenu
的当前代码
ActionBar actionBar = getSupportActionBar();
if (getWindow().hasFeature(Window.FEATURE_OPTIONS_PANEL)
&& (actionBar == null || !actionBar.closeOptionsMenu())) {
super.closeOptionsMenu();
}
并且 actionBar.closeOptionsMenu()
的结果是 true
- 即 super.closeOptionsMenu()
没有被调用。
所以我想我会直接调用android.app.Activity#closeOptionsMenu
中的代码
public void closeOptionsMenu() {
if (mWindow.hasFeature(Window.FEATURE_OPTIONS_PANEL) &&
(mActionBar == null || !mActionBar.closeOptionsMenu())) {
mWindow.closePanel(Window.FEATURE_OPTIONS_PANEL);
}
}
但是这个调用 mWindow.closePanel(Window.FEATURE_OPTIONS_PANEL);
仍然没有改变,菜单仍然打开。
知道如何解决这个问题吗?
而不是在 onMenuOpened
中调用 closeOptionsMenu
- 我发布了要在 onMenuOpened
之后调用的关闭方法。
public boolean onMenuOpened(int featureId, Menu menu) {
// Make sure the menu won't open
new Handler().post(this::closeOptionsMenu);
openBottomSheetMenu();
return false;
}
这解决了我遇到的具体问题 - 我仍然看到菜单一秒钟,但随后它就关闭了。
我认为在 open
仍然是 运行 时调用 close
是错误的。
仍然不确定为什么返回 false
不起作用
我正在使用单击菜单打开底部 sheet。
最初实施时,只是从 AppCompatActivity#onMenuOpened
返回 false
并没有完成这项工作。
我看到有人 complained about this 5 年前。
所以我添加了一个对 AppCompatActivity#closeOptionsMenu
的调用并且成功了。
我更新了我的应用以支持 API 级别 30,但现在我发现它不起作用。 (不知道是不是和API30有关,还是之前坏了我没注意到)
这是AppCompatActivity#closeOptionsMenu
ActionBar actionBar = getSupportActionBar();
if (getWindow().hasFeature(Window.FEATURE_OPTIONS_PANEL)
&& (actionBar == null || !actionBar.closeOptionsMenu())) {
super.closeOptionsMenu();
}
并且 actionBar.closeOptionsMenu()
的结果是 true
- 即 super.closeOptionsMenu()
没有被调用。
所以我想我会直接调用android.app.Activity#closeOptionsMenu
中的代码
public void closeOptionsMenu() {
if (mWindow.hasFeature(Window.FEATURE_OPTIONS_PANEL) &&
(mActionBar == null || !mActionBar.closeOptionsMenu())) {
mWindow.closePanel(Window.FEATURE_OPTIONS_PANEL);
}
}
但是这个调用 mWindow.closePanel(Window.FEATURE_OPTIONS_PANEL);
仍然没有改变,菜单仍然打开。
知道如何解决这个问题吗?
而不是在 onMenuOpened
中调用 closeOptionsMenu
- 我发布了要在 onMenuOpened
之后调用的关闭方法。
public boolean onMenuOpened(int featureId, Menu menu) {
// Make sure the menu won't open
new Handler().post(this::closeOptionsMenu);
openBottomSheetMenu();
return false;
}
这解决了我遇到的具体问题 - 我仍然看到菜单一秒钟,但随后它就关闭了。
我认为在 open
仍然是 运行 时调用 close
是错误的。
仍然不确定为什么返回 false
不起作用