android提供了三种菜单类型,分别为options menu,context menu,sub menu。options menu就是通过按home键来显示,context menu需要在view上按上2s后显示。这两种menu都有可以加入子菜单,子菜单不能嵌套子菜单。
1、利用xml定义选项菜单
a) options menu通过activity的onCreateOptionsMenu来生成
b) 这个函数只会在menu第一次生成时调用。任何想改变options menu的想法只能在onPrepareOptionsMenu来实现,这个函数会在menu显示前调用。
c) onOptionsItemSelected 用来处理选中的菜单项。
2、响应菜单项单击事件(3种方式)
1、onMenuItemSelected(int featureld, MenuItem item)
2、public boolean onOptionsItemSelected(MenuItem item)
3、onMenuItemClick
3、动态添加、修改和删除菜单项
菜单项的增删改查
增:add, addSubMenu
删:removeItem,removeGroup
改:
选项菜单:onPrepareOptionsMenu()——> MenuItem->setXXX()
上下文菜单:onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {} 方法在每次调用上下文菜单时都会被调用一次
4、子菜单的创建
l Xml创建
l 动态创建
Menu submenu = Menu.addSubMenu(x, x, x, x)
submenu.add()
submenu.add()
main_menu.addSubMenu(x,x,x,x);
或:
getMenuInflater ().inflater(R.menu.submenu, submenu);
5、带单选或复选的子菜单
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.second_menu, menu);
SubMenu sb = menu.findItem(R.id.item3).getSubMenu();
sb.setIcon(R.drawable.ic_launcher);
// sb.setGroupCheckable(0, true, true);
sb.getItem(0).setCheckable(true);
sb.getItem(0).setChecked(true);
this.menu = menu;
return super.onCreateOptionsMenu(menu);
}
6、上下文子菜单
public class ContextMenuActivity extends Activity {
ContextMenu menu = null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = (TextView) this.findViewById(R.id.textView);
this.registerForContextMenu(tv);
}
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo){
menu.setHeaderTitle("上下文菜单");
menu.setHeaderIcon(R.drawable.ic_launcher);
getMenuInflater().inflate(R.menu.context_menu, menu);
this.menu = menu;
}
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.subitem1:
Toast.makeText(this, "subitem1",
Toast.LENGTH_SHORT).show();
break;
case R.id.subitem2:
Toast.makeText(this, "subitem2",
Toast.LENGTH_SHORT).show();
break;
case R.id.subitem3:
Toast.makeText(this, "subitem3",
Toast.LENGTH_SHORT).show();
break;
}
return true;
}
}