- 选项菜单:最常规的菜单,android中把它叫做option menu
- 子菜单:android中点击子菜单将弹出悬浮窗口显示子菜单项。子菜单不支持嵌套,即子菜单中不能再包括其他子菜单。
- 上下文菜单(context menu):android中长按视图控件后出现的菜单,windows点击右键弹出的菜单即上下文菜单
- 图标菜单:这个比较简单,就是带icon的菜单项,需要注意的是子菜单项、上下文菜单项、扩展菜单项均无法显示图标。
- 选择菜单(alternative menu):用的比较少,以后单独介绍,本文先跳过(其实是我还没弄明白啦o(≧v≦)o~~)
- 扩展菜单:选项菜单最多只能显示6个菜单项,超过6个时,第6个菜单项会被系统替换为一个叫“更多”的子菜单,原来显示不下的菜单项都作为“更多”菜单的子菜单项。
选项菜单及子菜单
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android=" http://schemas.android.com/apk/res/android" >
<!-- 我们分三种情况进行设置 -->
<!-- Part 1 :普通情况,我们增加三个MenuItem,item对应MenuItem的格式。item中的android:id直接就是item的ID,即我们menu.add()中的第二个参数。 -->
<!-- title为显示的文字,即menu.add()中的第四个参数 -->
<!-- orderInCategory表明摆放的顺序,不一定从0还是计算,但必须大于等于0,数值小的位于前,如果数值一样,则安顺序摆放,此相当于menu.add()中的第三个参数order。当然我们建议从0,1,2,3....这样依次给出,并且与XML行文的顺序一致。 -->
<!-- icon设置图标,不言自喻 -->
<item
android:id="@+id/menu_quit"
android:title="@string/menu_quit_title"
android:orderInCategory="0"
android:icon="@drawable/menu_close_window"/>
<item
android:id="@+id/menu_help"
android:title="@string/menu_help_title"
android:orderInCategory="1"
android:icon="@drawable/menu_help"/>
<item
android:id="@+id/menu_setting"
android:title="@string/menu_setting_title"
android:orderInCategory="2"
android:icon="@drawable/menu_syssettings"/>
<!-- Part 2 :Group的情况,我们在Group中放入2个item,如果我们要显示3.4的方式,可以增加group的参数android:checkableBehavior来设置,single表示radio box,all表示checkbox,none表示checkable=flase。group中的android:id就是Gourp_ID,即menu.add()中的第一个参数。在这个例子中,我们设置这个group不可视,如果需要显示,代码为:menu.setGroupVisible(R.id.c11_other_stuff, true);-->
<!-- menuCategory指定菜单的优先级 -->
<!-- checkableBehavior指定菜单的选择行为,none(不可选),all(多选),single(单选) -->
<!-- enabled 指定菜单项是否可用 -->
<!-- visible 指定菜单项是否可见 -->
<group
android:id="@+id/menu_group"
android:menuCategory="secondary"
android:checkableBehavior="single"
android:visible="false">
<item
android:id="@+id/menu_group_about"
android:title="@string/menu_group_about_title"
android:orderInCategory="0"
android:icon="@drawable/menu_about"/>
<item
android:id="@+id/menu_group_copy"
android:title="@string/menu_group_copy_title"
android:orderInCategory="1"
android:icon="@drawable/menu_copy"/>
</group>
<!-- Part 3 :子menu的设置,将在menuItem内部嵌套一个<Menu>,在这个例子中的子菜单,试验了快捷键的方式 -->
<!-- alphabeticShortcut 按键快捷方式 -->
<item
android:id="@+id/menu_submenu"
android:orderInCategory="3"
android:title="@string/menu_submenu_title">
<menu>
<item
android:id="@+id/menu_submenu_share"
android:title="@string/menu_submenu_share_title"
android:icon="@drawable/menu_sharepage"
android:visible="true"
android:alphabeticShortcut="f"/>
<item
android:id="@+id/menu_submenu_search"
android:title="@string/menu_submenu_search_title"
android:icon="@drawable/menu_search"
android:visible="true"
android:alphabeticShortcut="s"/>
</menu>
</item>
</menu>
<menu xmlns:android=" http://schemas.android.com/apk/res/android" >
<!-- 我们分三种情况进行设置 -->
<!-- Part 1 :普通情况,我们增加三个MenuItem,item对应MenuItem的格式。item中的android:id直接就是item的ID,即我们menu.add()中的第二个参数。 -->
<!-- title为显示的文字,即menu.add()中的第四个参数 -->
<!-- orderInCategory表明摆放的顺序,不一定从0还是计算,但必须大于等于0,数值小的位于前,如果数值一样,则安顺序摆放,此相当于menu.add()中的第三个参数order。当然我们建议从0,1,2,3....这样依次给出,并且与XML行文的顺序一致。 -->
<!-- icon设置图标,不言自喻 -->
<item
android:id="@+id/menu_quit"
android:title="@string/menu_quit_title"
android:orderInCategory="0"
android:icon="@drawable/menu_close_window"/>
<item
android:id="@+id/menu_help"
android:title="@string/menu_help_title"
android:orderInCategory="1"
android:icon="@drawable/menu_help"/>
<item
android:id="@+id/menu_setting"
android:title="@string/menu_setting_title"
android:orderInCategory="2"
android:icon="@drawable/menu_syssettings"/>
<!-- Part 2 :Group的情况,我们在Group中放入2个item,如果我们要显示3.4的方式,可以增加group的参数android:checkableBehavior来设置,single表示radio box,all表示checkbox,none表示checkable=flase。group中的android:id就是Gourp_ID,即menu.add()中的第一个参数。在这个例子中,我们设置这个group不可视,如果需要显示,代码为:menu.setGroupVisible(R.id.c11_other_stuff, true);-->
<!-- menuCategory指定菜单的优先级 -->
<!-- checkableBehavior指定菜单的选择行为,none(不可选),all(多选),single(单选) -->
<!-- enabled 指定菜单项是否可用 -->
<!-- visible 指定菜单项是否可见 -->
<group
android:id="@+id/menu_group"
android:menuCategory="secondary"
android:checkableBehavior="single"
android:visible="false">
<item
android:id="@+id/menu_group_about"
android:title="@string/menu_group_about_title"
android:orderInCategory="0"
android:icon="@drawable/menu_about"/>
<item
android:id="@+id/menu_group_copy"
android:title="@string/menu_group_copy_title"
android:orderInCategory="1"
android:icon="@drawable/menu_copy"/>
</group>
<!-- Part 3 :子menu的设置,将在menuItem内部嵌套一个<Menu>,在这个例子中的子菜单,试验了快捷键的方式 -->
<!-- alphabeticShortcut 按键快捷方式 -->
<item
android:id="@+id/menu_submenu"
android:orderInCategory="3"
android:title="@string/menu_submenu_title">
<menu>
<item
android:id="@+id/menu_submenu_share"
android:title="@string/menu_submenu_share_title"
android:icon="@drawable/menu_sharepage"
android:visible="true"
android:alphabeticShortcut="f"/>
<item
android:id="@+id/menu_submenu_search"
android:title="@string/menu_submenu_search_title"
android:icon="@drawable/menu_search"
android:visible="true"
android:alphabeticShortcut="s"/>
</menu>
</item>
</menu>
/**
* Menu键菜单
*/
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.expanded_menus, menu);
return super.onCreateOptionsMenu(menu);
}
/**
* Menu键菜单响应
*/
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_quit:
this.finish();
break;
case R.id.menu_help:
Toast.makeText(this, "帮助信息", Toast.LENGTH_LONG).show();
break;
}
return true;
}
上下文菜单
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android=" http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/contextmenu_group_about"
android:icon="@drawable/menu_about"
android:orderInCategory="0"
android:title="@string/menu_group_about_title"/>
<item
android:id="@+id/contextmenu_group_copy"
android:title="@string/menu_group_copy_title"
android:orderInCategory="1"
android:icon="@drawable/menu_copy"/>
</menu>
<menu xmlns:android=" http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/contextmenu_group_about"
android:icon="@drawable/menu_about"
android:orderInCategory="0"
android:title="@string/menu_group_about_title"/>
<item
android:id="@+id/contextmenu_group_copy"
android:title="@string/menu_group_copy_title"
android:orderInCategory="1"
android:icon="@drawable/menu_copy"/>
</menu>
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
f
indViewById(R.id.tv).setOnCreateContextMenuListener(this);
//上下文菜单一定要添加Listener
}
/**
* 上下文菜单
*/
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.context_menu, menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
/**
* 上下文菜单响应
*/
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.contextmenu_group_about:
Toast.makeText(this, "详细信息", Toast.LENGTH_LONG).show();
break;
}
return true;
}