Android之Memu
Menu:一个管理菜单项的接口
Menus:“活动”中一重要的用户界面组成部分,它让开发者可以以自己熟习的方式去处理事件,应用Android框架,
我们可以轻松的在自己的应用程序中增加标准的菜单。
菜单分为三类:
Options Menu:三类菜单中最重要的,当用户点出“Menu"按钮时显示。面在3。0以后的版本中,也可以通用“Anction Bar”来显示。
Context Menu:类似于PC机中点击”右键“所弹出的菜单项,它一般注册在列表示图中。
Submenu:当点击菜单项时显示出的子菜单项。
(注:三类菜单其实都是MenuItem的集合)
Options Menu 的创建及应用
一、创建菜单集合项,可以通过两种方式
A:XML文件格式,在 res/menu/下新建一个menu资源文件
如:game_file.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<group android:id="@+id/group1" android:menuCategory="container" android:enabled="true" android:checkableBehavior="none" android:orderInCategory="0" android:visible="true">
<item android:id="@+id/item1" android:title="first-item" android:menuCategory="container" android:checked="true" android:visible="true"></item>
<item android:id="@+id/item2" android:title="second-item" android:menuCategory="container" android:checked="false" android:visible="true"></item>
<item android:id="@+id/item3" android:title="third-item" android:menuCategory="container" android:checked="false" android:visible="true"></item>
</group>
</menu>
<item android:id="@+id/item1" android:title="first-item" android:menuCategory="container" android:checked="true" android:visible="true"></item>
<item android:id="@+id/item2" android:title="second-item" android:menuCategory="container" android:checked="false" android:visible="true"></item>
<item android:id="@+id/item3" android:title="third-item" android:menuCategory="container" android:checked="false" android:visible="true"></item>
</group>
</menu>
而在源代码中:
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
//将资源文件“转换”成菜单对象
inflater.inflate(R.menu.game_file, menu);
return super.onCreateOptionsMenu(menu);
}
{
MenuInflater inflater = getMenuInflater();
//将资源文件“转换”成菜单对象
inflater.inflate(R.menu.game_file, menu);
return super.onCreateOptionsMenu(menu);
}
B:在JAVA创建的时候增加:
final private int menuMode =Menu.FIRST;
final private int menuExit =Menu.FIRST + 1;
final private int menuFile=Menu.FIRST+2;
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(0, menuMode, Menu.NONE, "Map Mode");
menu.add(0, menuExit, Menu.NONE, "Back");
menu.add(0,menuFile,Menu.NONE,"File Open");
return super.onCreateOptionsMenu(menu);
}
final private int menuFile=Menu.FIRST+2;
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(0, menuMode, Menu.NONE, "Map Mode");
menu.add(0, menuExit, Menu.NONE, "Back");
menu.add(0,menuFile,Menu.NONE,"File Open");
return super.onCreateOptionsMenu(menu);
}
说明:public boolean onCreateOptionsMenu(Menu menu)
当用户第一次打开应用程序时,将调用onCreateOptionsMenu进行菜单的创建。创建菜单当然是用于与用户交互的,所以呢。。。且有下一步:
二、当用户选择一个菜单项进行交互时,重写“onOptionsItemClick(MenuItem Item)”方法进行功能自定义:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
int fId=item.getItemId();//得到唯一ID
switch(fId)
{
case menuMode:
{
Toast.makeText(getApplicationContext(),"MapMode",Toast.LENGTH_LONG)
.show();
break;
}
case menuExit:
{
Toast.makeText(getApplicationContext(),"Back",Toast.LENGTH_LONG)
.show();
break;
}
case menuFile:
{
Toast.makeText(getApplicationContext(), "Open File",Toast.LENGTH_SHORT)
.show();
break;
}
case R.id.item2:
{
String tempTitle=(String) item.getTitle();
Toast.makeText(getApplicationContext(), tempTitle,Toast.LENGTH_SHORT)
.show();
break;
}
default:
{
Toast.makeText(getApplicationContext(),"NONE",Toast.LENGTH_LONG)
.show();
break;
}
}
return super.onOptionsItemSelected(item);
}
{
int fId=item.getItemId();//得到唯一ID
switch(fId)
{
case menuMode:
{
Toast.makeText(getApplicationContext(),"MapMode",Toast.LENGTH_LONG)
.show();
break;
}
case menuExit:
{
Toast.makeText(getApplicationContext(),"Back",Toast.LENGTH_LONG)
.show();
break;
}
case menuFile:
{
Toast.makeText(getApplicationContext(), "Open File",Toast.LENGTH_SHORT)
.show();
break;
}
case R.id.item2:
{
String tempTitle=(String) item.getTitle();
Toast.makeText(getApplicationContext(), tempTitle,Toast.LENGTH_SHORT)
.show();
break;
}
default:
{
Toast.makeText(getApplicationContext(),"NONE",Toast.LENGTH_LONG)
.show();
break;
}
}
return super.onOptionsItemSelected(item);
}
三、扩展,3.0后,Android都是在用户第一次使用应用程序的时候就创建菜单,而不像以前是在用户第一次使用菜单时创建,有时,根据实际需要,在某些
情况下动态增加菜单: onPrepareOptionsMenu()
如:
@Override
public boolean onPrepareOptionsMenu (Menu menu)
{
menu.add(0,menuMode,Menu.NONE,"MenuMode");
return super.onPrepareOptionsMenu(menu);
}
{
menu.add(0,menuMode,Menu.NONE,"MenuMode");
return super.onPrepareOptionsMenu(menu);
}
要注意的是。在每次用户打开菜单时,都将执行onPrepareOptionsMenu,所以,在动态增加的时候得判断是否已添加。
参考资源:http://developer.android.com/guide/topics/ui/menus.html