Android Menus

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() 添加:

 

  1. /*   Creates   the   menu   items   */  
  1. public   boolean onCreateOptionsMenu(Menu menu) { 
  1.     menu.add( 0 , MENU_NEW_GAME, 0 , "New Game" ); 
  2.     menu.add( 0 , MENU_QUIT, 0 , "Quit" ).setIcon(R.drawable.menu_quit_icon); 
  1.     return   true
  1. }  
  2.  
  1. /*   Handles   item   selections   */  
  1. public   boolean onOptionsItemSelected(MenuItem item) { 
  1.     switch (item.getItemId()) { 
  1.     case MENU_NEW_GAME: 
  1.         newGame();  
  1.         return   true
  1.     case MENU_QUIT: 
  1.         quit();  
  2.         return   true
  3.     }  
  1.     return   false
  1. }  

 

 

方式二,通过 XML 文件添加:

res/menu/ 下新建 options_menu.xml 文件:

 

Xml 代码  

  1. <menu   xmlns:android = "http://schemas.android.com/apk/res/android" >  
  1.     <item   android:id = "@+id/new_game"  
  1.           android:title = "New Game"   />  
  1.     <item   android:id = "@+id/quit"  
  2.           android:title = "Quit"   />  
  1. </menu>  

 

onCreateOptionsMenu() 方法中,我们这样写:

 

Java 代码  

  1. public   boolean onCreateOptionsMenu(Menu menu) { 
  1.     MenuInflater   inflater   =   getMenuInflater();  
  1.     inflater.inflate(R.menu.options_menu,   menu);  
  1.     return   true
  1. }  

 

 

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 代码  

  1. public   void onCreateContextMenu(ContextMenu menu, View v, 
  1.                                 ContextMenuInfo   menuInfo)   {  
  2.   super .onCreateContextMenu(menu, v, menuInfo); 
  1.   menu.add( 0 , EDIT_ID, 0 , "Edit" ); 
  1.   menu.add( 0 , DELETE_ID, 0 "Delete" ); 
  2. }  
  3.  
  1. public   boolean onContextItemSelected(MenuItem item) { 
  1.   AdapterContextMenuInfo   info   =   (AdapterContextMenuInfo)   item.getMenuInfo();  
  2.   switch (item.getItemId()) { 
  1.   case EDIT_ID: 
  1.     editNote(info.id);  
  1.     return   true
  2.   case DELETE_ID: 
  1.     deleteNote(info.id);  
  1.     return   true
  1.   default
  1.     return   super .onContextItemSelected(item); 
  1.   }  
  1. }  

 

注册这个 Context Menu:

 

registerForContextMenu(getListView());  

 

这里的   getListView() ListActivity 的方法,它将返回一个 ListView. 记住任何一个 View 对象都可以注册一个 Context Menu

 

 

3.Submenus  

 

  1. public   boolean onCreateOptionsMenu(Menu menu) { 
  1.   boolean result = super .onCreateOptionsMenu(menu); 
  1.  
  2.   SubMenu   fileMenu   =   menu.addSubMenu( "File" ); 
  3.   SubMenu   editMenu   =   menu.addSubMenu( "Edit" ); 
  4.   fileMenu.add( 0,NEW_ID,0, "new" ); 
  5.   fileMenu.add( 0,OPEN_ID,0, "open" ); 
  6.   fileMenu.add( 0,SAV_ID,0, "save" ); 
  7.   editMenu.add( 0,UNDO_ID,0, "undo" ); 
  8.   editMenu.add( 0,REDO_ID,0, "redo" ); 
  9.  
  10.   return result; 
  11. }  

 

 

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 不能添加快捷键。

 

参考: http://oldman.javaeye.com/blog/709254

    http://www.ways2u.com/?post=134

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值