1.Options Menu.
通过按下手机上的 MENU 键,可以打开 Options Menu 。 Options Menu 最多只能在屏幕最下面显示 6 个菜单项,称为 Icon Menu. 如果添加了多于 6 个的菜单项,将通过 "More" 菜单项显示,这种称为 Expanded Menu. 当 Options Menu 第一次被打开时,系统将调用 Activity 的 onCreateOptionsMenu(Menu menu) 方法, 在这个方法中可以通过配置一个 XML 文件,或者调用 Menu 的 add() 方法来添加你想要的 Menu 。 Menu 的 add() 方法将返回一个 MenuItem 对象,你用通过这个对象来配置一些其他属性。比如: icon , shortcut , intent 。 Menu 的 add() 方法很多,要注意的是 itemId 这个参数,它的唯一性。
当选择了一个 Options Menu 时 , 会调用 onOptionsItemSelected(MenuItem item) 方法。如果想修改 Options Menu ,需要重写 onPrepareOptionsMenu() 方法。
方式一,用 add() 添加:
- /* Creates the menu items */
- public boolean onCreateOptionsMenu(Menu menu) {
- menu.add( 0 , MENU_NEW_GAME, 0 , "New Game" );
- menu.add( 0 , MENU_QUIT, 0 , "Quit" ).setIcon(R.drawable.menu_quit_icon);
- return true ;
- }
- /* Handles item selections */
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case MENU_NEW_GAME:
- newGame();
- return true ;
- case MENU_QUIT:
- quit();
- return true ;
- }
- return false ;
- }
方式二,通过 XML 文件添加:
在 res/menu/ 下新建 options_menu.xml 文件:
Xml 代码
- <menu xmlns:android = "http://schemas.android.com/apk/res/android" >
- <item android:id = "@+id/new_game"
- android:title = "New Game" />
- <item android:id = "@+id/quit"
- android:title = "Quit" />
- </menu>
在 onCreateOptionsMenu() 方法中,我们这样写:
Java 代码
- public boolean onCreateOptionsMenu(Menu menu) {
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.options_menu, menu);
- return true ;
- }
2.Context Menu.
它需要注册到某个 View 对象上,当长按这个 View 大概 2 秒时间,会出现这个 Context Menu 。为某个 View 注册 Context Menu 是用 registerForContextMenu (View view) 方法来实现。 Context Menu 在显示前都会调用 onCreateContextMenu 来生成 menu 。 onContextItemSelected 用来处理选中的菜单项。
注意 :Context Menu 不支持 icons 和 shortcut keys.
Java 代码
- public void onCreateContextMenu(ContextMenu menu, View v,
- ContextMenuInfo menuInfo) {
- super .onCreateContextMenu(menu, v, menuInfo);
- menu.add( 0 , EDIT_ID, 0 , "Edit" );
- menu.add( 0 , DELETE_ID, 0 , "Delete" );
- }
- public boolean onContextItemSelected(MenuItem item) {
- AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
- switch (item.getItemId()) {
- case EDIT_ID:
- editNote(info.id);
- return true ;
- case DELETE_ID:
- deleteNote(info.id);
- return true ;
- default :
- return super .onContextItemSelected(item);
- }
- }
注册这个 Context Menu:
registerForContextMenu(getListView());
这里的 getListView() 是 ListActivity 的方法,它将返回一个 ListView. 记住任何一个 View 对象都可以注册一个 Context Menu 。
3.Submenus
- public boolean onCreateOptionsMenu(Menu menu) {
- boolean result = super .onCreateOptionsMenu(menu);
- SubMenu fileMenu = menu.addSubMenu( "File" );
- SubMenu editMenu = menu.addSubMenu( "Edit" );
- fileMenu.add( 0,NEW_ID,0, "new" );
- fileMenu.add( 0,OPEN_ID,0, "open" );
- fileMenu.add( 0,SAV_ID,0, "save" );
- editMenu.add( 0,UNDO_ID,0, "undo" );
- editMenu.add( 0,REDO_ID,0, "redo" );
- return result;
- }
4.Menu Features
Menu groups 菜单项分组的功能:
在用 Menu 的 add() 方法时,通过参数 groupId 的设置可以实现分组。 setGroupVisible() 用来显示或者隐藏你的菜单组。 setGroupEnabled() 用来启用或者禁用你的菜单组。 setGroupCheckable() 用来设置你的菜单项是否可选。 setGroupCheckable() 方法有三个参数 int group, boolean checkable, boolean exclusive 。第一个参数是要设置的组,第二个参数是否可选,第三个参数为 true 表示单选, false 表示多选。
Shortcut keys 快捷键:
我们还可以设置快捷键。使用 setAlphabeticShortcut(char),setNumericShortcut(int),setShortcut(char,int) 可以设置字符,数字,组合(字符 + 数字)键。注意: Context Menu 不能添加快捷键。