菜单是Android 系统中重要的用户接口,菜单Menu 不同于Tab 。
菜单可分为
1.选项菜单,如图
创建选项菜单,需要重写Activity 的onCreateOptionsMenu(). Android系统的选项菜单最多显示6个菜单项.如果是5个,上面一行显示两个菜单项,下面一行显示3个菜单项
如果菜单项的标题过长,系统会显示三行两列的选项菜单.

处理选项菜单单击事件的方法有3种,
(1) 设置菜单项的单击事件,通过MenuItem 接口的setOnMenuItemClickListener
(2). 选项选中事件 ,通过Activity类 的onOptionItemSelected 方法
(3) 通过Activity 类的 onMenuItemSelected 方法,
注意:如果使用了菜单项的单击事件(即第一种方法),后两种方法都失效了,并且与菜单项关联的Activity 将失效,也就是说系统将会调用单击事件方法,将不会显示与菜单项关联的Activity
---------------------
以下介绍上下文菜单与子菜单
上下文菜单的显示效果和子菜单相同点: 也分为菜单头和菜单项,在菜单项上不能显示图像,但可以在菜单头显示图像,上下文菜单和子菜单都不能嵌套子菜单
2. 带图像、复选框、选择项按钮的菜单,即子菜单
Menu接口的addSubMenu() 用来添加子菜单, 该方法定义如下:
SubMenu addSubMenu(final CharSequence title)
SubMenu addSubMenu(final int titleRes)
SubMenu addSubMenu(final int groupId, final int itemId, int order, final CharSequence title)
SubMenu addSubMenu(int groudId, int itemId, int order, int titleRes)
3. 与任意View对象关联的 ContextMenu 上下文菜单,它相当于PC上的右键菜单
要触发上下文菜单,须通过长按某个视图实现。
(1)创建上下文菜单,需要重写Activity 的onCreateContextMenu()方法
该方法定义如下: public void onCreateContextMenu(ContextMenu menu ,View view ,ContextMenuInfo menuInfo)
上下文菜单与其他菜单不同的是,必须注册到指定的View才能显示,注册上下文菜单可以使用Activity 的registerForContextMenu()方法实现
例如 TextView tv = (TextView)findViewById(R.id.tv);
registerForContextMenu(tv); //注册上下文菜单
在上下文菜单中可以添加子菜单
(2) 上下文菜单项的单击事件有3种: 可以使用单击事件、 onMenuItemSelected方法、 Activity类的onContextItemSelected方法
====================
在Activity 类还有一些与菜单相关的事件,如:
public boolean onPrepareOptionsMenu(Menu menu) 在显示选项菜单之前被调用,一般用来即将显示的选项菜单
public boolean onMenuOpened(int featuredId, Menu menu) 在显示选项菜单之前被调用,在onPrepareOptionsMenu()方法之后调用
public void onOptionsMenuClosed(Menu menu) 在关闭选项菜单时被调用
public void onContextMenuClosed(Menu menu) 在关闭上下文菜单时被调用
具体代码请参见 ch04_menu 工程