android提供了三种菜单类型,分别为optionsmenu,context menu,sub menu。options menu就是通过按home键来显示,context menu需要在view上按上2s后显示。这两种menu都有可以加入子菜单,子菜单不能种不能嵌套子菜单。
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>
运行后可以出现两级菜单:
在点击”子菜单”之后,出现: