Android平台下所提供的菜单大体上可分为三类:选项菜单(Options Menu)、子菜单(Submenu)和上下文菜单(Context Menu)。


示例1OptionsMenu

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
menu.add(Menu.NONE, 1, Menu.NONE, "菜单一");
menu.add(Menu.NONE, 2, Menu.NONE, "菜单二");
menu.add(Menu.NONE, 3, Menu.NONE, "菜单三");
return true;
}
   @Override//重写onOptionsItemSelected()方法。实现菜单的点击事件处理
   public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1://用户点击了ID为"1"的子项,在这里编写代码
break;
default:
break;
}
   return super.onOptionsItemSelected(item);
}
}


示例2Submenu

 

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
menu.add(Menu.NONE, 1, Menu.NONE, "菜单一");
menu.add(Menu.NONE, 2, Menu.NONE, "菜单二");
menu.add(Menu.NONE, 3, Menu.NONE, "菜单三");
SubMenu smMenu=menu.addSubMenu(Menu.NONE, 4, Menu.NONE, "子菜单");
smMenu.setIcon(R.drawable.ic_launcher);
smMenu.setHeaderTitle("子菜单");
smMenu.add(Menu.NONE, 5, Menu.NONE, "菜单1");
smMenu.add(Menu.NONE, 6, Menu.NONE, "菜单2");
smMenu.add(Menu.NONE, 7, Menu.NONE, "菜单3");
return true;
}
   @Override//重写onOptionsItemSelected()方法。实现菜单的点击事件处理
   public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1://用户点击了ID为"1"的子项,在这里编写代码
break;
default:
break;
}
   return super.onOptionsItemSelected(item);
}
}


子菜单的每一项都不支持图标显示,且不能在嵌套子菜单。子菜单的点击事件的处理方法与选项菜单时一样的,通过重写onOptionsItemSelected方法,然后使用MenuItem对象的getIntemId()即可匹配到用户点击的菜单项。



ContextMenu(上下文菜单)类似于普通桌面程序的右键功能。但它不是通过用户右击得到的,而是当用户点击界面元素超过2秒后自动弹出的菜单。上下文菜单可以被注册到任何的View对象中,如基本控件、布局控件、ListViewSpinner中的某一项等。


示例3Contextmenu

public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView) findViewById(R.id.tv);
//注册,这个View将会启动上下文菜单
registerForContextMenu(tv);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.add(Menu.NONE, 1, Menu.NONE,"选项一");
menu.add(Menu.NONE, 2, Menu.NONE,"选项二");
menu.add(Menu.NONE, 3, Menu.NONE,"选项三");
menu.add(Menu.NONE, 4, Menu.NONE,"选项四");
SubMenu sm=menu.addSubMenu(Menu.NONE, 5, Menu.NONE,"子选项");
sm.add(Menu.NONE, 6, Menu.NONE,"选项六");
sm.add(Menu.NONE, 7, Menu.NONE,"选项七");
super.onCreateContextMenu(menu, v, menuInfo);
}
}