标签:
在AndroidSDK中,无需从头创建菜单对象。因为一个活动只与一个菜单关联,所以Android会为该活动创建此菜单,然后将它传给Activity类的onCreateOptionsMenu回调。此方法可用于使用一组菜单项填充单个传入的菜单。
@Override public boolean onCreateOptionsMenu(Menu menu) { //.... return super.onCreateOptionsMenu(menu); }
当填充菜单项之后,这段代码返回true,使菜单可见。如果返回false,菜单将不可见。
@Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, //菜单组 1, //菜单项id 0, //菜单项排序id "option1"); //菜单项标题 menu.add(0, 2, 1, "option2"); menu.add(0, 3, 2, "option3"); return super.onCreateOptionsMenu(menu); }
添加菜单项所必需的第一个参数是菜单组id(int型)。第二个参数是菜单项id,在选择该菜单项时会将它发送给回调函数。第三个参数表示排序id。最后一个参数是菜单项的标题(即显示的菜单项名称)。
除了title参数以外的三个参数:菜单组,菜单项id,菜单项排序id都是可选的,如果不想指定任何id,可以使用Menu.NONE。
@Override public boolean onCreateOptionsMenu(Menu menu) { int group1 = 1; menu.add(group1, 1, 1, "g1.item1"); menu.add(group1, 2, 2, "g1.item2"); int group2 = 2; menu.add(group2, 3, 3, "g2.item1"); menu.add(group2, 4, 4, "g2.item2"); return super.onCreateOptionsMenu(menu); }
这里需要注意,菜单项id和排序id与组是独立的。
操作菜单组的方法:
@Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case 1: Toast.makeText(MainActivity.this, item.getTitle(), 1000).show(); break; case 2: Toast.makeText(MainActivity.this, item.getTitle(), 1000).show(); break; case 3: Toast.makeText(MainActivity.this, item.getTitle(), 1000).show(); break; case 4: Toast.makeText(MainActivity.this, item.getTitle(), 1000).show(); break; } return super.onOptionsItemSelected(item); }
这里的关键模式是通过MenuItem类的getItemId()方法检查菜单项id,然后执行必要的操作。如果onOptionsItemSelected()处理了一个菜单项,它将返回true。此菜单事件将不会进一步传播。对于onOptionsItemSelected()未处理的菜单项回调,onOptionsItemSelected()应该通过super.onOptionsItemSelected()调用父方法。onOptionsItemSelected()的默认实现返回false。
class MyResponse implements OnMenuItemClickListener{ @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case 1: Toast.makeText(MainActivity.this, item.getTitle(), 1000).show(); break; case 2: Toast.makeText(MainActivity.this, item.getTitle(), 1000).show(); break; case 3: Toast.makeText(MainActivity.this, item.getTitle(), 1000).show(); break; case 4: Toast.makeText(MainActivity.this, item.getTitle(), 1000).show(); break; } return true; } }
@Override public boolean onCreateOptionsMenu(Menu menu) { int group1 = 1; menu.add(group1, 1, 1, "g1.item1"); menu.add(group1, 2, 2, "g1.item2"); int group2 = 2; menu.add(group2, 3, 3, "g2.item1"); menu.add(group2, 4, 4, "g2.item2"); for (int i = 1; i < menu.size(); i++) { menu.getItem(i).setOnMenuItemClickListener(new MyResponse()); } return super.onCreateOptionsMenu(menu); }
标签:
原文地址:http://www.cnblogs.com/monty/p/4269044.html