【问题标题】:androidx.appcompat.app.AppCompatActivity#closeOptionsMenu doesn't close the menuandroidx.appcompat.app.AppCompatActivity#closeOptionsMenu 不关闭菜单
【发布时间】:2021-08-02 11:30:44
【问题描述】:

我正在使用单击菜单来打开底部工作表。

最初实现此功能时,仅从 AppCompatActivity#onMenuOpened 返回 false 并没有完成这项工作。

我看到有人在 5 年前就已经complained about this了。

所以我添加了对AppCompatActivity#closeOptionsMenu 的调用,它成功了。

我更新了我的应用程序以支持 API 级别 30,但现在我注意到它不起作用。 (不确定这是否与 API 30 有关,或者它是否更早发生了故障而我没有注意到)

这是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); 仍然没有改变,菜单仍然打开。

知道如何解决这个问题吗?

【问题讨论】:

    标签: android android-menu android-11


    【解决方案1】:

    而不是在onMenuOpened 中调用closeOptionsMenu - 我发布了在onMenuOpened 之后调用的close 方法。

        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 不起作用

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多