Android中的Menu:ContextMenu、OptionMenu
1、ContextMenu(上下文菜单)
1.1、一个简单的ContextMenu
1)首先建立一个布局文件contextmenu_layout.xml,在布局文件中只建立一个普通的TextView组件,该组件用于显示一个字符串,当用户鼠标长按此组件时弹出一个简单的ContextMenu:
2)然后新建一个Activity类ContextMenuDemoActivity,该类用于初始化布局文件和组件信息,并重写相应方法。在onCreate()方法中必须为组件注册,才能在长按时弹出上下文菜单,调用registerForContextMenu(组件名称),完成组件注册。<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tv_showctxmenu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="显示上下文菜单"/> </LinearLayout>
3)长按TextView的文本,运行效果:package com.example.highcomponent; import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.widget.TextView; public class ContextMenuDemoActivity extends Activity { private TextView tv_showctxmenu = null;//声明组件 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.contextmenu_layout); //设置布局管理器 tv_showctxmenu = (TextView)super.findViewById(R.id.tv_showctxmenu);//实例化组件 super.registerForContextMenu(tv_showctxmenu);//注册上下文菜单 } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderIcon(R.drawable.ic_launcher); //设置菜单图标 menu.setHeaderTitle("上下文菜单标题"); //设置菜单标题 menu.add(0, 0, 0, "菜单1"); //添加菜单列表项 menu.add(0, 1, 0, "菜单2"); //添加菜单列表项 menu.add(0, 2, 0, "菜单3"); //添加菜单列表项 } }
2、OptionMenu(选项菜单)
2.1、一个简单的OptionMenu
在模拟器的按钮中有一个menu的按钮,点击它会弹出一个菜单,此菜单就是一个OptionMenu,此菜单是系统提供的。现在要实现在一个Activity中产生一个OptionMenu,则需要覆写Activity的onCreateOptionsMenu(Menu menu)方法。1)、首先建立一个布局文件,optionmenu_layout.xml,布局文件中一个组件都不定义。2)、新建立一个Activity类OptionMenuDemoActivity类,在此类中覆写onCreateOptionsMenu(Menu menu)方法,并在该方法中添加菜单项。<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > </LinearLayout>
package com.example.highcomponent; import android.app.Activity; import android.os.Bundle; import android.view.Menu; public class OptionMenuDemoActivtiy extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.optionmenu_layout);//设置布局管理器 } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, 0, 0, "OptionMenu1");//添加菜单项 menu.add(0, 1, 0, "OptionMenu2");//添加菜单项 menu.add(0, 2, 0, "OptionMenu3");//添加菜单项 return super.onCreateOptionsMenu(menu); } }
3)、点击模拟器的menu按钮,会在模拟器的下方出现一个OptionMenu,运行效果为: