您的位置:首页 > 移动开发 > Android开发

Android中的Menu(菜单)

2014-07-09 22:53 246 查看
选项菜单:最常规的菜单,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键菜单
*/
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>

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: