为了检测溢出菜单的点击,可以使用以下代码:
@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) {
...
}
为了检测菜单项的点击,如果您有这样的菜单:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu2" android:alphabeticShortcut="b"
android:title="Menu No. 2" android:orderInCategory="2">
<menu >
<group android:id="@+id/group2" android:checkableBehavior="single">
<item android:id="@+id/submenu1" android:title="SubMenu No. 1" />
<item android:id="@+id/submenu2" android:title="SubMenu No. 2" />
</group>
</menu>
</item>
</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;
...
}
@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);
}
MainActivity
中使用这两个函数即可。@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
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_something"
android:title="@string/something_text" />
<!--Other menu items-->
</menu>
默认情况下,单击溢出按钮会显示选项菜单,因此我认为您应该能够拦截事件,然后通过覆盖Activity.onPrepareOptionsMenu
来执行所需操作。
这有点棘手,因为我找不到溢出按钮的ID,所以我使用了这个技巧。
在您的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;
}
...
}
AppCompatDelegate.FEATURE_SUPPORT_ACTION_BAR
。我对这个问题真的很疯狂。 - AlvaroSantisteban