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

时间:2014-05-22 12:07:06

标签: android android-actionbar overflow-menu

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

void onOverflowMenu(boolean expanded) {
}

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

如果用户在onMenuItemSelected()中选择了一个菜单项,我就能检测到溢出菜单已关闭。但是如果用户通过点击溢出菜单,按后退键以及所有其他情况来关闭溢出菜单,我也想检测它。

有没有办法实现呢?

2 个答案:

答案 0 :(得分:21)

要抓住Activity中的公开行动:

@Override
public boolean onMenuOpened(int featureId, Menu menu) {
    ...
    return super.onMenuOpened(featureId, menu);
}

要抓住已关闭的操作,如果用户在菜单视图外部触摸:

@Override
public void onPanelClosed(int featureId, Menu menu) {
    ...
}

答案 1 :(得分:2)

恕我直言,最简单的方法是设置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
            }
        }
    });
}