在Android中,所有的菜单创建方法都由Activity类本身提供。Android系统中一共有3种菜单:选项菜单(ptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu),下面分别介绍。
一、选项菜单(OptionsMenu)
选项菜单是一种最常用也是最基本的菜单,通过覆写android.app.Activity为在几个方法即可实现。这些方法有:
(1)设置多个菜单项(MenuItem),如果返回true,表示显示菜单,反之则不显示:
Public booleanonCreateOptionsMenu(Menu menu)
(2)判断菜单项的操作:public boolean onOptionsItemSelected(MenuItemitem)
(3)当菜单关闭时触发此操作:public void onOptionsMenuClose(Menu menu)
(4)在菜单显示前触发此操作,如果返回true,则继续调用onCreateOptionsMenu()方法,反之不调用:public BooleanonPrepareOptionsMenu(Menu menu)
例 1 程序运行效果截图
实现过程:
1. 编写main.xml布局管理器
xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#00ff00">
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按下键盘上的 Menu 键将会出现选择菜单,快试试吧..."/>
LinearLayout>
2. 编写MainActivity程序
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
//super.getMenuInflater().inflate(R.menu.main_menu, menu);
menu.add(Menu.NONE, Menu.FIRST + 1, 5, "删除")
.setIcon(android.R.drawable.ic_menu_delete);
menu.add(Menu.NONE, Menu.FIRST + 2, 2, "保存")
.setIcon(android.R.drawable.ic_menu_save);
menu.add(Menu.NONE, Menu.FIRST + 3, 6, "帮助")
.setIcon(android.R.drawable.ic_menu_help);
menu.add(Menu.NONE, Menu.FIRST + 4, 1, "添加")
.setIcon(android.R.drawable.ic_menu_add);
menu.add(Menu.NONE, Menu.FIRST + 5, 4, "详细")
.setIcon(android.R.drawable.ic_menu_info_details);
menu.add(Menu.NONE, Menu.FIRST + 6, 7, "发送")
.setIcon(android.R.drawable.ic_menu_send);
menu.add(Menu.NONE, Menu.FIRST + 7, 3, "编辑")
.setIcon(android.R.drawable.ic_menu_edit);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case Menu.FIRST + 1:
Toast.makeText(this, "你选择了“添加菜单”项", Toast.LENGTH_LONG).show();
break;
case Menu.FIRST + 2:
Toast.makeText(this, "你选择了“保存菜单”项", Toast.LENGTH_LONG).show();
break;
case Menu.FIRST + 3:
Toast.makeText(this, "你选择了“编辑菜单”项", Toast.LENGTH_LONG).show();
break;
case Menu.FIRST + 4:
Toast.makeText(this, "你选择了“详细菜单”项", Toast.LENGTH_LONG).show();
break;
case Menu.FIRST + 5:
Toast.makeText(this, "你选择了“删除菜单”项", Toast.LENGTH_LONG).show();
break;
case Menu.FIRST + 6:
Toast.makeText(this, "你选择了“发送菜单”项", Toast.LENGTH_LONG).show();
break;
case Menu.FIRST + 7:
Toast.makeText(this, "你选择了“帮助菜单”项", Toast.LENGTH_LONG).show();
break;
}
return false;
}
@Override
public void onOptionsMenuClosed(Menu menu){
Toast.makeText(this, "选择菜单关闭了", Toast.LENGTH_LONG).show();
}
@Override
public boolean onPrepareOptionsMenu(Menu menu){
Toast.makeText(this, "在菜单显示(onCreateOptionsMenu())之前系统会调用此操作,可以" +
"在此操作中完成一些处理操作。)",
Toast.LENGTH_LONG).show();
return true;
}
}
此程序中直接通过onCreateOptionsmenu()方法在菜单中增加了多个菜单项,在应用中也可以通过配置资源文件的方式设置所有的菜单项,可在res文件夹中建立单项的配置文件。建立res\menu\menu.xml文件配置菜单项:
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/item_1" android:title="添加" android:icon="@android:drawable/ic_menu_add"/> <item android:id="@+id/item_2" android:title="保存" android:icon="@android:drawable/ic_menu_save"/> <item android:id="@+id/item_3" android:title="编辑" android:icon="@android:drawable/ic_menu_edit"/> <item android:id="@+id/item_4" android:title="详细" android:icon="@android:drawable/ic_menu_info_details"/> <item android:id="@+id/item_5" android:title="删除" android:icon="@android:drawable/ic_menu_delete"/> <item android:id="@+id/item_6" android:title="帮助" android:icon="@android:drawable/ic_menu_send"/> <item android:id="@+id/item_7" android:title="发送" android:icon="@android:drawable/ic_menu_help"/> menu>
在此配置文件中通过
Public Boolean onCreateOptionsMenu(Menu menu){ //显示菜单
super.getMenuInflater().inflate(R.menu.menu, menu); //填充菜单项
return true;
}
二、上下文菜单ContextMenu
上下文菜单类似于Windows中的右键菜单的操作形式,在android中,在一个列表显示(ListView)操作时,用户可以通过长按操作打开某些操作的菜单,这种菜单就是上下文菜单。要进行上下文菜单的操作,需要在Activity程序中覆写如下方法:
(1) public void onCreateContextMenu(ContextMenu menu, View view,
ContextMenu.ContextMenuInfo menuInfo):在此方法中可以设置要显示的菜单项;
(2)public boolean onContextItemSelected(MenuItemitem):当某个菜单项被选中时,触发此操作;
(3)public void onContextMenuClosed(Menu menu):当菜单项关闭时触发此操作。
例 2 程序运行效果截图
实现过程:
1.直接编写MainActivity程序
[java] view plain copy print ?
也可以像例 1 一样通过配置资源文件来得到想要显示的菜单项。
三、子菜单SubMenu
可以为每一个菜单定义多个子菜单(SubMenu),子菜单的创建依然要通过Activity类中的onCreateOptionsMenu()方法完成。
例 3 程序运行效果截图
实现过程:
1. 直接编写MainActivity程序
[java] view plain copy print ?
也可以像例 1 一样通过配置资源文件来得到想要显示的子菜单项