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

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

void onOverflowMenu(boolean expanded) { } 

为了处理开放的情况,我尝试了onPrepareOptionsMenu() ,但是当构造ActionBar时或当invalidateOptionsMenu()被调用时触发它。 这不是我想要的。

如果用户在onMenuItemSelected()select了一个菜单项,我能够检测到溢出菜单是closures的。 但是,如果用户通过点击外部button来closures溢出菜单,则还要检测它,方法是按返回键和其他所有情况。

有没有办法来实现呢?

Solutions Collecting From Web of "Actionbar的溢出菜单打开/closures监听器"

Activity捕捉开放行动:

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

要捕捉closures的动作,并且如果用户触摸菜单视图的外部:

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

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