在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>
在此配置文件中通过<item>元素定义了多个菜单项,要从此配置文件中取出数据,就要修改onCreateOptionsMenu(),利用super.getMenuInfalter().inflater()方法加载menu.xml配置文件中的菜单信息,修改后的代码如下:
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程序
也可以像例 1
一样通过配置资源文件来得到想要显示的菜单项。
三、子菜单SubMenu
可以为每一个菜单定义多个子菜单(SubMenu),子菜单的创建依然要通过Activity类中的onCreateOptionsMenu()方法完成。
例 3 程序运行效果截图
实现过程:
1. 直接编写MainActivity程序
也可以像例 1 一样通过配置资源文件来得到想要显示的子菜单项。
菜单Menu、选项菜单OptionsMenu、上下文菜单ContextMenu、子菜单SubMenu,布布扣,bubuko.com
菜单Menu、选项菜单OptionsMenu、上下文菜单ContextMenu、子菜单SubMenu
原文:http://www.cnblogs.com/duanxz/p/3578194.html