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(0, 1, 0, "添加"); SubMenu subMenu2 = menu.addSubMenu(0, 2, 0, "修改"); SubMenu subMenu3 = menu.addSubMenu(0, 3, 0, "查询"); SubMenu subMenu4 = menu.addSubMenu(0, 4, 0, "删除"); // 给子菜单添加菜单项 subMenu1.add(0, 1, 0, "菜单项11"); subMenu1.add(0, 1, 0, "菜单项12"); subMenu1.add(0, 1, 0, "菜单项13"); subMenu2.add(0, 2, 0, "菜单项21"); subMenu2.add(0, 2, 0, "菜单项22"); subMenu3.add(0, 3, 0, "菜单项33"); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case 1: Toast.makeText(this, "执行添加", 0).show(); break; case 2: Toast.makeText(this, "执行修改", 0).show(); break; case 3: Toast.makeText(this, "执行查询", 0).show(); break; case 4: Toast.makeText(this, "执行删除", 0).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>
当长点击listview的一个条目时的效果图