(1)选项菜单
显示和当前活动相关的信息,通过单击按下MENU按钮来激活选项菜单。对于携带图标的选项菜单,每次最多只能显示6个,当菜单选项多于6个时,将只显示前5个和一个扩展菜单选项,点击扩展菜单选项(more)将会弹出其余的菜单项。扩展菜单项中将不会显示图标,但是可以显示单选按钮和复选框。
创建一个选项菜单的步骤:
1、覆盖Activity的onCreateOptionsMenu(Menu menu)函数
2、调用menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法来为菜单设置图标
3、当菜单项()被选择时,我们可以通过覆盖Activity的onOptionsItemSeleted(MenuItem item)方法来响应事件
下面先来看下onCreateOptionsMenu()函数
public boolean onCreateOptionsMenu (Menu menu)
函数返回值:布尔值,表示是否显示该函数中设置的菜单
参数:Menu对象
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
createMenu(menu);
return true;
}
onCreateOptionsMenu函数仅在第一次使用菜单时被调用一次。在这个函数我们可以通过Menu对象的add()方法添加菜单子项,这个函数有四个重载函数,下面分别介绍:
public abstract MenuItem add (CharSequence title)
参数说明:指定菜单上的显示文字
public abstract MenuItem add (int groupId, int itemId, int order, int titleRes)
参数说明:groudId:是指组ID,用以批量地对菜单子项进行处理和排序itemId:是子项ID,是每一个菜单子项的唯一标识order:指定菜单子项在选项菜单中的排列顺序titlerRes: 菜单标题的引用public abstract MenuItem add (int titleRes)参数说明:titlerRes: 菜单标题的引用通过string.xml中添加
public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title)
这个是最常用的方法参数说明:groudId:是指组ID,用以批量地对菜单子项进行处理和排序itemId:是子项ID,是每一个菜单子项的唯一标识order:指定菜单子项在选项菜单中的排列顺序 title: 菜单标题
public boolean onOptionsItemSeleted(MenuItem item)
响应单击不同选项的事件。
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
return MenuChoice(item);
}
辅助方法
private void createMenu(Menu menu)
{
MenuItem mnu1 = menu.add(0, 0, 0, "Item1");
{
mnu1.setAlphabeticShortcut('a');
mnu1.setIcon(R.drawable.ic_launcher);
}
MenuItem mnu2 = menu.add(0 , 1, 1,"Item2");
{
mnu2.setAlphabeticShortcut('b');
mnu2.setIcon(R.drawable.ic_launcher);
}
MenuItem mnu3 = menu.add(0 , 2, 2,"Item3");
{
mnu3.setAlphabeticShortcut('c');
mnu3.setIcon(R.drawable.ic_launcher);
}
MenuItem mnu4 = menu.add(0 , 3, 3,"Item4");
{
mnu4.setAlphabeticShortcut('d');
mnu4.setIcon(R.drawable.ic_launcher);
}
menu.add(0, 4, 4, "Item5");
menu.add(0, 5, 5, "Item6");
menu.add(0, 6, 6, "Item7");
}
private boolean MenuChoice(MenuItem item)
{
switch (item.getItemId())
{
case 0:
Toast.makeText(this, "You clicked on Item 1", Toast.LENGTH_SHORT).show();
return true;
case 1:
Toast.makeText(this, "You clicked on Item 2", Toast.LENGTH_SHORT).show();
return true;
case 2:
Toast.makeText(this, "You clicked on Item 3", Toast.LENGTH_SHORT).show();
return true;
case 3:
Toast.makeText(this, "You clicked on Item 4", Toast.LENGTH_SHORT).show();
return true;
case 4:
Toast.makeText(this, "You clicked on Item 5", Toast.LENGTH_SHORT).show();
return true;
case 5:
Toast.makeText(this, "You clicked on Item 6", Toast.LENGTH_SHORT).show();
return true;
case 6:
Toast.makeText(this, "You clicked on Item 7", Toast.LENGTH_SHORT).show();
return true;
default:
break;
}
return false;
}
(2)上下文菜单
有时候我们也可以叫做快键菜单。例如我们在电脑桌面右键所看到的菜单就是快捷菜单,也叫上下文菜单,叫上下文菜单是因为Context翻译成为上下文的意思。
创建上下文ContextMenu菜单的步骤:
1、 覆盖Activity的onCreateContextMenu()方法,调用Menu的add方法添加菜单项
2、 覆盖onContexItemSelected()方法,响应菜单单击事件
3、 调用registerForContexMenu()方法为实例注册上下文菜单(相当于setOnCreateContextMenuListener())
public void onCreateContextMenu (ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo)
参数说明:
menu:需要显示的快捷菜单
v:V是用户选择的界面元素
menuInfo:menuInfo是所选择界面元素的额外信息
@Override
public void onCreateContextMenu(ContextMenu menu,View view,ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu, view, menuInfo);
createMenu( menu);
}
说明:这个onCreateContextMenu与onCreateOptionsMenu函数不一样,onCreateOptionsMenu函数仅在选项菜单第一次启动时被调用一次,而onCreateContextMenu函数在每次启动都将会被调用一次。
public boolean onContextItemSelected (MenuItem item)
这个方法和前面的onMenuItemSelected大同小异,在此就不再多说明了
4.或者用XML创建上下文菜单
需要通过Activity的getMenuInflater()返回一个MenuInflater对象,然后通过MenuInflater对象的inflater()方法指定XML文件的引用
public void inflate (int menuRes, Menu menu)
参数说明:
menuRes:XML文件的引用位置
menu:要显示的菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
//XML方式创建的菜单项
MenuInflater inflater=getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
context_menu.xml 文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/contextMenu1" android:title="XML创建的菜单子项1"></item>
<item android:id="@+id/contextMenu2" android:title="XML创建的菜单子项2"></item>
<item android:id="@+id/contextMenu2" android:title="XML创建的菜单子项3"></item>
</menu>