只需要重写onCreateOptionsMenu方法,在其中写添加菜单的逻辑:
@Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(Menu.NONE, Menu.FIRST + 1, 1, "增加").setIcon(R.drawable.add); menu.add(Menu.NONE, Menu.FIRST + 2, 2, "删除").setIcon(R.drawable.delete); menu.add(Menu.NONE, Menu.FIRST + 3, 3, "修改").setIcon(R.drawable.edit); menu.add(Menu.NONE, Menu.FIRST + 4, 4, "保存").setIcon(R.drawable.save); return true; }然后重写菜单项点击方法onOptionsItemSelected:
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case Menu.FIRST + 1: Toast.makeText(OptionMenuActivity.this, "选择的是新增菜单", Toast.LENGTH_LONG).show(); break; case Menu.FIRST + 2: Toast.makeText(OptionMenuActivity.this, "选择的是删除菜单", Toast.LENGTH_LONG).show(); break; case Menu.FIRST + 3: Toast.makeText(OptionMenuActivity.this, "选择的是编辑菜单", Toast.LENGTH_LONG).show(); break; case Menu.FIRST + 4: Toast.makeText(OptionMenuActivity.this, "选择的是保存菜单", Toast.LENGTH_LONG).show(); break; } return false; }运行截图如下:
当然菜单信息还可以写到XML文件中,在res/menu/下新建optionmenu_config.xml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/item1" android:icon="@drawable/add" android:title="添加"/> <item android:id="@+id/item2" android:icon="@drawable/delete" android:title="删除"/> <item android:id="@+id/item3" android:icon="@drawable/edit" android:title="编辑"/> <item android:id="@+id/item4" android:icon="@drawable/save" android:title="保存"/> </menu>此时的创建菜单的方法onCreateOptionsMenu如下:
@Override public boolean onCreateOptionsMenu(Menu menu) { super.getMenuInflater().inflate(R.menu.optionmenu_config, menu); return true; }注意选择项的方法onOptionsItemSelected也要做点修改( case分支值需要变,注意跟原来比较):
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.item1: Toast.makeText(this, "选择的是新增菜单", Toast.LENGTH_LONG).show(); break; case R.id.item2: Toast.makeText(this, "选择的是删除菜单", Toast.LENGTH_LONG).show(); break; case R.id.item3: Toast.makeText(this, "选择的是编辑菜单", Toast.LENGTH_LONG).show(); break; case R.id.item4: Toast.makeText(this, "选择的是保存菜单", Toast.LENGTH_LONG).show(); break; default: Toast.makeText(this, "选择了菜单" + item.getTitle(), Toast.LENGTH_LONG) .show(); break; } return false; }这个错误找了好久,直到加了个default分支才发现这个错误,所以用switch时写default也是一个好的习惯;
@Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, view, menuInfo); menu.setHeaderTitle("操作城市"); menu.add(Menu.NONE,Menu.FIRST+1,1,"查看城市信息"); menu.add(Menu.NONE,Menu.FIRST+2,2,"添加城市信息"); menu.add(Menu.NONE,Menu.FIRST+3,3,"编辑城市信息"); menu.add(Menu.NONE,Menu.FIRST+4,4,"删除城市信息"); }然后重载点击方法onContextItemSelected:
@Override public boolean onContextItemSelected(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; } return false; }运行截图如下:
这里菜单信息也可以写到XML文件中,方法跟选项菜单里一样,就不复述了。
@Override public boolean onCreateOptionsMenu(Menu menu) { SubMenu fileMenu = menu.addSubMenu("文件"); SubMenu editMenu = menu.addSubMenu("编辑"); fileMenu.add(Menu.NONE,Menu.FIRST+1,1,"新建"); fileMenu.add(Menu.NONE,Menu.FIRST+2,2,"打开"); fileMenu.add(Menu.NONE,Menu.FIRST+3,3,"保存"); editMenu.add(Menu.NONE,Menu.FIRST+4,4,"撤销"); editMenu.add(Menu.NONE,Menu.FIRST+5,5,"恢复"); return true; }然后重写菜单项点击方法onOptionsItemSelected:
@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; } return false; }运行截图如下:
这里菜单信息也可以写到XML文件中,方法跟选项菜单里类似,就不复述了。
最后为了将这些页面组织起来,我用了一个页面显示了6个按钮,点击之后分别跳转到相应的页面,跳转的方法可上篇文章Android之Intent,主界面如下:
后记,每每写Demo,总会遇到一些莫名其妙的问题,解决之后总有一种成长的喜悦,希望自己能坚持把Android开发的应用层面都研究完,到时候想到什么功能就可以在自己的手机上装装玩玩。另外在Android 3.0之后Menu就有了导航神奇ActionBar用以替代Menu,有空还是要好好研究下。
项目源码下载