Menu是一个接口, 他有2个子接口, SubMenu和ContextMenu; 前者菜单常见于按home键就会出现 ,后者是一个上下文菜单, 一般点击某个条目会在手机屏幕中出现一个类似悬浮窗口的菜单
1.SubMenu的实现
总体来说它主要有2个方法–add()和addSubMenu()前者是往子菜单中添加菜单项; 后者是添加一个新的子菜单
案例:
public class MainActivity extends Activity { @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// 向Menu中添加一个子菜单
SubMenu subMenu1 = menu.addSubMenu(, , , "添加");
SubMenu subMenu2 = menu.addSubMenu(, , , "修改");
SubMenu subMenu3 = menu.addSubMenu(, , , "查询");
SubMenu subMenu4 = menu.addSubMenu(, , , "删除"); // 给子菜单添加菜单项
subMenu1.add(, , , "菜单项11");
subMenu1.add(, , , "菜单项12");
subMenu1.add(, , , "菜单项13"); subMenu2.add(, , , "菜单项21");
subMenu2.add(, , , "菜单项22"); subMenu3.add(, , , "菜单项33"); return super.onCreateOptionsMenu(menu);
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case :
Toast.makeText(this, "执行添加", ).show();
break;
case :
Toast.makeText(this, "执行修改", ).show();
break;
case :
Toast.makeText(this, "执行查询", ).show();
break;
case :
Toast.makeText(this, "执行删除", ).show();
break; }
return super.onOptionsItemSelected(item);
}}
对于add(int groupId,int itemId,int order, int titleRes);参数解释
groupid表示某个菜单项组,也就是这个菜单项位于哪个组中,itemId用于在回调函数标示一个菜单项,order显示顺序,title是一个标题; 对于addSubMenu()参数和这个类似
2.上下文菜单Contextmenu
public class MainActivity2 extends Activity { @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2); String[] names = new String[] { "zhangsan", "lisi", "wangwu", "zhaoliu" }; ListView lv = (ListView) findViewById(R.id.lv); lv.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_expandable_list_item_1,
names)); //步骤1给listview注册上下午菜单
registerForContextMenu(lv);
} // 步骤2重写onCreateContextMenu创建上下文菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
} // 步骤3在res/menu/创建context_menu.xml // 步骤4重写onContextItemSelected执行点击事件
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
switch (item.getItemId()) {
default:
return super.onContextItemSelected(item);
}
}}
主布局文件很简单,就一个Listview,不在给出
context_menu.xml文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/update_name" android:title="更改姓名"/>
<item android:id="@+id/update_delete" android:title="删除姓名"/>
</menu>