14

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

void onOverflowMenu(boolean expanded) {
}

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

如果用户在onMenuItemSelected(). 但我也想检测用户是否通过点击外部菜单、按返回键以及所有其他情况关闭溢出菜单。

有没有办法实现它?

4

2 回答 2

22

要在 中捕获打开的操作Activity

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

要捕捉关闭的动作,如果用户在菜单视图之外触摸:

@Override
public void onPanelClosed(int featureId, Menu menu) {
    ...
}
于 2014-05-22T12:17:14.980 回答
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
            }
        }
    });
}
于 2017-08-25T12:51:07.790 回答