Actionbar的溢出菜单打开/关闭监听器

Dim*_*lov 14 android android-actionbar overflow-menu

当用户打开/关闭ActionBar的溢出菜单(三个点)时我想听,就像这样:

void onOverflowMenu(boolean expanded) {
}
Run Code Online (Sandbox Code Playgroud)

为了处理打开的案例,我尝试过onPrepareOptionsMenu(),但是在构造ActionBar或invalidateOptionsMenu()调用它时会触发它.这不是我想要的.

如果用户选择菜单项,我能够检测到溢出菜单已关闭onMenuItemSelected().但是如果用户通过点击外部菜单,按后退键以及所有其他情况关闭溢出菜单,我也想检测它.

有没有办法实现呢?

sch*_*luk 21

要抓住开放行动Activity:

@Override
public boolean onMenuOpened(int featureId, Menu menu) {
    ...
    return super.onMenuOpened(featureId, menu);
}
Run Code Online (Sandbox Code Playgroud)

要捕获关闭操作,如果用户触摸菜单视图外:

@Override
public void onPanelClosed(int featureId, Menu menu) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!有用.此外,我添加了检查if(featureId == FEATURE_ACTION_BAR)以确保触发了哪个菜单. (4认同)
  • 请在此处参考正确的解决方案.打开溢出菜单时,只会调用一次http://stackoverflow.com/questions/41558904/why-is-menu-of-appcompatactivity-onmenuopenedint-featureid-menu-menu-null onPrepareOptionsMenu(). (2认同)

pra*_*att 6

恕我直言,最简单的方法是设置 ActionBar.OnMenuVisibilityListener

ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
    actionBar.addOnMenuVisibilityListener(new ActionBar.OnMenuVisibilityListener() {
        @Override
        public void onMenuVisibilityChanged(boolean isVisible) {
            if (isVisible) {
                // menu expanded
            } else {
                // menu collapsed
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)