一种简单方便的方法就是通过XML文件来配置Menu菜单,设置的时候用Menu或者MenuInflater
通常情况下,覆写Menu按键按下去的时候的回调函数onCreateOptionsMenu
在该函数中配置Menu
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.groups, menu);
该菜单对应的资源文件为res/menu/groups.xml
- <?xml version="1.0" encoding="utf-8"?>
- <menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:id="@+id/browser_visibility"
- android:title="@string/browser_visibility" />
- <group android:id="@+id/browser">
- <item android:id="@+id/refresh"
- android:title="@string/browser_refresh" />
- <item android:id="@+id/bookmark"
- android:title="@string/browser_bookmark" />
- </group>
- <item android:id="@+id/email_visibility"
- android:title="@string/email_visibility" />
- <group android:id="@+id/email">
- <item android:id="@+id/reply"
- android:title="@string/email_reply" />
- <item android:id="@+id/forward"
- android:title="@string/email_forward" />
- </group>
- </menu>
- switch (item.getItemId()) {
- case R.id.browser_visibility:
- //对浏览组显示或者隐藏
- final boolean shouldShowBrowser = !mMenu.findItem(R.id.refresh).isVisible();
- mMenu.setGroupVisible(R.id.browser, shouldShowBrowser);
- break;
- case R.id.email_visibility:
- // 对email组进行显示或者隐藏
- final boolean shouldShowEmail = !mMenu.findItem(R.id.reply).isVisible();
- mMenu.setGroupVisible(R.id.email, shouldShowEmail);
- break;
- // 默认选项会给出提示信息
- default:
- if (!item.hasSubMenu()) {
- Toast.makeText(this, item.getTitle(),Toast.LENGTH_SHORT).show();
- return true;
- }
- break;
- }
mMenu是一个全局的私有变量
如果一个应用程序中包含多个Activity,并且想在每个Actiivty中都显示Menu的话,可以考虑创建一个Activity,实现onCreateOptionsMenu()和onOptionItemSelected()两个方法,其他的Activity在实现的时候,继承该类就可以了
这样只需要管理一组Menu就可以了
如果需要添加菜单的话,只需要覆写onCreateOptionMenu()方法,并且调用super.onCreateOptionsMenu(menu)以便显示原来的Menu,然后用menu.add()来添加