Android系统里面有3种类型的菜单:options menu,context menu,sub menu。
一、 options menu详解
options menu在屏幕底部最多只能显示6个菜单项。
在Activity里面,一般通过以下函数来使用options menu:
Activity::onCreateOptionsMenu (Menu menu) 创建options menu,这个函数 只会在menu第一次显示时调用。
Activity::onOptionsItemSelected (MenuItem item) 处理选中的菜单项。
例:
第一步:
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(0, ITEM1, 0, "menu1");
menu.add(0, ITEM2, 1, "menu2");
return super.onCreateOptionsMenu(menu);
}
通过onCreateOptionsMenu方法,增加了两个按钮,按钮名字分别为menu1和menu2。
主要通过方法Menu.add(int groupId, int itemId, int order, CharSequence title)。
groupId:分组的id,如果不用分组就用0。
itemId:menu当中每一项的id。这个id是唯一的。
order:排序的信息,根据这个字段的大小,menu对其中的项进行排序显示。order小 的显示在前边,大的显示在后边。
title:menu项的显示信息。
第二步:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case ITEM1:
Log.i("onOptionsItemSelected", "menu1");
break;
case ITEM2:
Log.i("onOptionsItemSelected", "menu2");
break;
}
return super.onOptionsItemSelected(item);
}
这个方法是实现menu响应单击事件,是一个回调方法。即这个方法只有在事件触发后才会被Android系统自动调用执行。而这个事件就是单击菜单里的某一项(MenuItem),看到这个方法传进来的参数是MenuItem,也就是menu当中的某一项。
其中通过item.getItemId()可以获得menu的唯一id。
二、contextmenu详解
要在相应的view上按几秒后才显示的,用于view,跟某个具体的view绑定在一起。
在Activity里面,一般通过以下函数来使用context menu:
registerForContextMenu(View view)
为某个view注册context menu,一般在Activity::onCreate里面调用。
onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo)
创建context menu,和options menu不同,context meun每次显示时都会调用这 个函数。
public boolean onContextItemSelected(MenuItem item)
处理选中的菜单项。
例:
第一步:
在onCreate方法中为某个view注册
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txt = (TextView)findViewById(R.id.txt);
registerForContextMenu(txt);
}
第二步:
生成menu
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo)
{
menu.add(0, ITEM1, 0, "EDIT");
menu.add(0, ITEM2, 1, "DELETE");
super.onCreateContextMenu(menu, v, menuInfo);
}
这个方法同options menu中的onCreateOptionsMenu类似。不予详解。
第三步:
处理选中的菜单项
@Override
public boolean onContextItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case ITEM1:
Log.i("onOptionsItemSelected", "EDIT");
break;
case ITEM2:
Log.i("onOptionsItemSelected", "DELETE");
break;
}
return super.onContextItemSelected(item);
}
这个方法同options menu中的onCreateOptionsMenu类似。不予详解。
三、 sub menu详解
将onCreateOptionsMenu内代码改成如下代码,即可实现submenu:
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
SubMenu sub1 = menu.addSubMenu(0, ITEM1, 0, "sub1");
SubMenu sub2 = menu.addSubMenu(0, ITEM2, 1, "sub2");
sub1.add(0, ITEM3, 0, "sub1_1");
sub1.add(0, ITEM4, 1, "sub1_2");
sub2.add(0, ITEM5, 2, "sub2_1");
sub2.add(0, ITEM6, 3, "sub2_2");
return super.onCreateOptionsMenu(menu);
}
这里主要通过menu.addSubMenu来增加子菜单,其他的和options menu一样。
addSubMenu和add的方法类似,这里不做详细讲解。