- 选项菜单: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模式,建议用第二种方法。
- 上下文菜单 ContextMenu
上下文菜单类似于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;
}
}
效果: