Android平台下所提供的菜单大体上可分为三类:选项菜单(Options Menu)、子菜单(Submenu)和上下文菜单(Context Menu)。
示例1:OptionsMenu
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); } }
示例2:Submenu
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对象中,如基本控件、布局控件、ListView、Spinner中的某一项等。
示例3:Contextmenu
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); } }