在Android系统中提供了两种形式的菜单:
l The Icon Menu
这种菜单就是在Activity界面展示时我们按下菜单键产生,效果图为:
这种菜单只能设置图标,快捷方式,不能添加控件。
l The Expanded Menu
展开式菜单,这种菜单不能单独激活,必须是在子菜单中,或者控件的ContextMenu中显示,控件的ContextMenu是在点击控件3秒钟后激活显示,这种菜单上可以增加单选、多选等控件,效果图如下:
菜单的创建方法,是在Activity和View中,都有onCreateOptionsMenu这样的虚函数,可以直接继承,然后在该函数里menu.add()来创建,如下面的代码中加粗的。
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// Group ID
int groupId = 0;
// The order position of the item
int menuItemOrder = Menu.NONE;
// Create the menu item and keep a reference to it.
MenuItem addMenu = menu.add(groupId, ADD_NEW_TODO,
menuItemOrder, R.string.addMenu);
MenuItem delMenu = menu.add(groupId, REMOVE_TODO,
menuItemOrder, R.string.delMenu);
addMenu.setIcon(R.drawable.add);
delMenu.setIcon(R.drawable.del);
return true;
}
菜单创建完后我们可以在onPrepareOptionsMenu(Menu menu)这个继承函数里面根据实际情况来修改菜单的属性,或动态创建。
同样public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo)这个函数主要用于创建ContextMenu,创建方法一至。
有了创建菜单的方法,我们就想到,这菜单有哪些属性可供我们修改:
l setTitle(str):通过这个方法,我们可以设置菜单的显示文字,当然这文字可以是资源编号
l setIcon(R.drawable.xxx):设置显示图标,设置值为图标的资源编号
l setShortcut(‘0’,’a’):设置菜单快捷健,’0’是数字健盘,’a’是字母健盘上的健
l setCheckable(true):这项设置主要是针对radio菜单,checkBox菜单,使用如:
// Create a new check box item.
menu.add(0, CHECKBOX_ITEM, Menu.NONE, “CheckBox”).setCheckable(true);
// Create a radio button group.
menu.add(RB_GROUP, RADIOBUTTON_1, Menu.NONE, “Radiobutton 1”);
menu.add(RB_GROUP, RADIOBUTTON_2, Menu.NONE, “Radiobutton 2”);
menu.add(RB_GROUP, RADIOBUTTON_3, Menu.NONE,
“Radiobutton 3”).setChecked(true);
menu.setGroupCheckable(RB_GROUP, true, true);
好,这些方法也基本够我们用的了,最后我们看一下怎样接受这个菜单的点击事件:
方法一:
利用菜单自带的监听器功能,直接监听,就象处理控件事件一样,如:
menuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem _menuItem) {
[ ... execute click handling, return true if handled ... ]
return true;
}
});
方法二:
在Activity和View都直接提供了一个菜单点击统一处理函数,如下:
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
// Find which menu item has been selected
switch (item.getItemId()) {
// Check for each known menu item
case (MENU_ITEM):
[ ... Perform menu handler actions ... ]
return true;
}
// Return false if you have not handled the menu item.
return false;
}
这里通过switch(item.getItemId())来分别处理各个菜单项功能。
了解了这些功能后,就可以试试在我们的程序中加个菜单了。