检测单击操作栏的“溢出”菜单按钮

我可以检测操作栏菜单按钮上的点击/点击,即用于显示溢出菜单项吗?

默认情况下,它会打开列表,其中包含一个“设置”项。 这是截图:

到目前为止它正在检测点击“2”,但我想检测点击“1”。

    要检测溢出菜单上的单击,请输入以下代码:

    @Override public boolean onMenuOpened(int featureId, Menu menu) { if(featureId == AppCompatDelegate.FEATURE_SUPPORT_ACTION_BAR && menu != null){ //overflow menu clicked, put code here... } return super.onMenuOpened(featureId, menu); } @Override public void onPanelClosed(int featureId, Menu menu) { ... } 

    要检测单击菜单项,以防您有这样的菜单:

                

    您应该能够检测到点击

    onOptionsItemSelected

     @Override public boolean onOptionsItemSelected(MenuItem item) { Log.w("ANDROID MENU TUTORIAL:", "onOptionsItemSelected(MenuItem item)"); // Handle item selection switch (item.getItemId()) { case R.id.menu2: Toast.makeText(this, "Clicked: Menu No. 2", Toast.LENGTH_SHORT).show(); return true; ... } 

    最后我find了解决方案。 覆盖FragmentActivity.onKeyDown

     @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub switch (keyCode) { case KeyEvent.KEYCODE_MENU: // Do Sometihng break; default: break; } return super.onKeyDown(keyCode, event); } 

    默认情况下单击溢出按钮会显示选项菜单,所以我相信您应设法拦截事件,然后通过覆盖Activity.onPrepareOptionsMenu执行您想要的操作。

    这有点棘手,因为我找不到溢出按钮的id,所以我使用了这个hack。 在您的Activity

     private boolean actionBarClicked = false; @Override public boolean onOptionsItemSelected (MenuItem item) { if (item.getId() == ) actionBarClicked = true; return false; // Let default processing occur } @Override public boolean onPrepareOptionsMenu (Menu menu) { if (actionBarClicked) { // Overflow button of ActionBar was clicked, do what you want here. actionBarClicked = false; } ... } 

    如果您正确设置了工具栏和充气菜单,只需在MainActivity使用这两个function即可

     @Override public boolean onMenuOpened(int featureId, Menu menu) { //Perform some action on menu open return super.onMenuOpened(featureId, menu); } @Override public void onPanelClosed(int featureId, Menu menu) { //Perform some action on menu closed } 

    MainActivity onCreate函数中的设置工具栏

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); 

    并膨胀在xml文件中定义的菜单

     @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.my_menu, menu); return true; } 

    my_menu.xml