options menu最多只能在屏幕最下面显示6个菜单选项,成为iconmenu,icon menu不能有checkable选项。多余6的会以more icon menu来调出,成为expanded menu。options menu通过activity的onCreateOptionsMenu来生成,这个函数只会在menu第一次生成时调用。任何想改变options menu的想法只能在onPrepareOptionsMenu来实现,这个函数会在menu显示前调用。onOptionsItemSelected 处理选中的菜单项。
context menu是跟某个具体的view绑定在一起,在activity种用registerForContextMenu来为某个view注册contextmenu。context menu在显示前都会调用onCreateContextMenu来生成menu。onContextItemSelected选中的菜单项。
android还提供了对菜单项进行分组的功能,可以把相似功能的菜单项分成同一个组,这样就可以通过调用setGroupCheckable,setGroupEnabled,setGroupVisible来设置菜单属性,而无须单独设置。
一、option Menu
在此介绍最简单的菜单应用代码如下:
public class Menu extends Activity{ private static final int SAVE=1; private static final int SAVE_AS=SAVE+1; private static final int DELETE=SAVE+2; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = this.getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); menu.add(1,SAVE,1,"保存"); menu.add(1,SAVE_AS,2,"另存为"); menu.add(1,DELETE,3,"删除"); menu.findItem(SAVE).setIcon(R.drawable.ic_launcher); return true; } int i=1; @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem item = menu.findItem(SAVE_AS); item.setTitle(item.getTitle()+""+1); i++; return super.onPrepareOptionsMenu(menu); } public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ case R.id.newFile: Toast.makeText(this, "new file", Toast.LENGTH_LONG).show(); break; case R.id.exit: this.finish(); break; } return super.onOptionsItemSelected(item); } }
对应的main.xml文件为:
<?xml version="1.0"encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/newFile" android:icon="@drawable/ic_launcher" android:title="@string/newFile_title"/> <item android:id="@+id/exit" android:icon="@drawable/ic_launcher" android:title="@string/exit_title"/> </menu>
运行后,需要点击menu菜单按钮,,即可出现菜单,如图所示:
点击”新建文件”(当然现在还没有实现真整的新建文件),会弹出相应的相应
二、sub Menu
将onCreateOptionsMenu内代码改成如下代码,即可实现submenu:
public class MenuTestActivity3 extends Activity { privatestatic final int SUBMENU = 10; privatestatic final int SUBITEM1 = SUBMENU +1; privatestatic final int SUBITEM2= SUBMENU +2; privatestatic final int SUBITEM3= SUBMENU +3; publicvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } publicboolean onCreateOptionsMenu(Menu menu) { MenuInflaterinflater = this.getMenuInflater(); inflater.inflate(R.menu.sub,menu); SubMenusubMenu = menu.addSubMenu(1,SUBMENU,1,"子菜单"); subMenu.add(20,SUBITEM1,1,"1"); subMenu.add(20,SUBITEM2,2,"2"); subMenu.add(30,SUBITEM3,3,"3"); MenuItemitem = subMenu.getItem(0); subMenu.setGroupCheckable(20,true, true); item.setChecked(true); subMenu.findItem(SUBITEM3).setCheckable(true); returntrue; } }
对应的main.xml文件为:
<?xml version="1.0"encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menuitem1" android:title="menuitem1"/> <item android:id="@+id/menuitem2" android:title="menuitem2"> <menu > <item android:id="@+id/menuitem3" android:title="menuitem3"/> <item android:id="@+id/menuitem4" android:title="menuitem4"> </item> </menu> </item> </menu>
运行后可以出现两级菜单:
在点击”子菜单”之后,出现: