当用户打开/关闭ActionBar的溢出菜单(三个点)时我想听,就像这样:
void onOverflowMenu(boolean expanded) {
}
为了处理打开的案例,我尝试了onPrepareOptionsMenu()
,但是在构建ActionBar或调用invalidateOptionsMenu()
时触发了它。这不是我想要的。
如果用户在onMenuItemSelected()
中选择了一个菜单项,我就能检测到溢出菜单已关闭。但是如果用户通过点击溢出菜单,按后退键以及所有其他情况来关闭溢出菜单,我也想检测它。
有没有办法实现呢?
答案 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
}
}
});
}