天天看点

Android 之菜单

 菜单是Android  系统中重要的用户接口,菜单Menu  不同于Tab 。

菜单可分为 

1.选项菜单,如图

创建选项菜单,需要重写Activity  的onCreateOptionsMenu().  Android系统的选项菜单最多显示6个菜单项.如果是5个,上面一行显示两个菜单项,下面一行显示3个菜单项

如果菜单项的标题过长,系统会显示三行两列的选项菜单.

Android 之菜单

处理选项菜单单击事件的方法有3种,

(1)  设置菜单项的单击事件,通过MenuItem  接口的setOnMenuItemClickListener

(2).  选项选中事件 ,通过Activity类 的onOptionItemSelected 方法

(3)  通过Activity 类的 onMenuItemSelected 方法,

注意:如果使用了菜单项的单击事件(即第一种方法),后两种方法都失效了,并且与菜单项关联的Activity 将失效,也就是说系统将会调用单击事件方法,将不会显示与菜单项关联的Activity 

---------------------

以下介绍上下文菜单与子菜单

上下文菜单的显示效果和子菜单相同点:  也分为菜单头和菜单项,在菜单项上不能显示图像,但可以在菜单头显示图像,上下文菜单和子菜单都不能嵌套子菜单

2. 带图像、复选框、选择项按钮的菜单,即子菜单

Android 之菜单

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  工程