- 选项菜单:OptionsMenu
选项菜单是我们最常用的,我们打开Activity会发现一个目前我们用不到的的自动生成代码:
public boolean onCreateOptionsMenu(Menu menu)
这就是创建菜单的方法,现在我们来实现一个简单的选项菜单:
在Activity加入以下代码:
public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, 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; } public boolean onOptionsItemSelected(MenuItem menu){ switch(menu.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; } public void onOptionsMenuClosed(Menu menu){ Toast.makeText(this, "菜单项关闭", Toast.LENGTH_LONG).show(); } public void onOptionsPrepareOptionsMenu(Menu menu){ Toast.makeText(this, "在菜单打开前执行此操作,可以做预处理", Toast.LENGTH_LONG).show(); }
实现效果如下:
另一种方法是在配置文件menu/menu.xml配置菜单项
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/item1" android:title="添加" android:icon="@android:drawable/ic_menu_add" /> <item android:id="@+id/item1" android:title="删除" android:icon="@android:drawable/ic_menu_add" /> <item android:id="@+id/item1" android:title="编辑" android:icon="@android:drawable/ic_menu_add" /> <item android:id="@+id/item1" android:title="帮助" android:icon="@android:drawable/ic_menu_add" /> </menu>
然后将Activity修改为:
public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); super.getMenuInflater().inflate(R.menu.mymenu, 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; }
前面的代码注释掉了,两种方法都可以,但是为了以后的修改方便不要使用过多的硬代码,符合MVC模式,建议用第二种方法。
上下文菜单类似于windows右键功能,以列表形式列出一系列菜单,这种在手机默认显示上下文菜单,在虚拟器显示选项菜单。因此读者了解即可
Activity代码是:
public class MainActivity extends Activity { private String data[] = new String[] { "操作系统", "计算机网络", "计算机图形", "信息安全", "汇编语言" }; // 定义ListView的显示项 private ListView listView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.listView = new ListView(this); this.listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, this.data)); super.setContentView(this.listView); super.registerForContextMenu(this.listView) ; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. SubMenu save=menu.addSubMenu("保存"); SubMenu edit=menu.addSubMenu("编辑"); save.add(Menu.NONE,Menu.FIRST + 1 , 1, "新建") ; save.add(Menu.NONE,Menu.FIRST + 2 , 2, "打开") ; save.add(Menu.NONE,Menu.FIRST + 3 , 3, "保存") ; edit.add(Menu.NONE,Menu.FIRST + 4 , 4, "撤消") ; edit.add(Menu.NONE,Menu.FIRST + 5 , 5, "恢复") ; return true; } public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { // 判断操作的菜单ID 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; } }
效果: