Android平台提供了3中菜单的实现方式,即
1、选项菜单(OptionMenu),
2、上下文菜单(ContextMenu),
3、子菜单(SubMenu).
1.OptionsMenu (选项菜单)
使用方法:
方法一:
1、添加菜单项: 重写onCreateOptionsMenu(Menu menu) ,在其中
添加菜单
menu.add((int groupId, int itemId, int order, charsequence title) .setIcon(drawable ID)
关于参数:
1、组别(groupId),如果不分组的话就写Menu.NONE或者0,
2、itemId,这个很重要,Android根据这个Id来确定不同的菜单
3、顺序(order),哪个菜单项在前面由这个参数的大小决定
4、文本(charsequence ),菜单项的显示文本
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- menu.add(0, MENU_ITEM_COUNTER, 0, "开始");
- menu.add(0, MENU_ITEM_COUNTER + 1, 0, "暂停");
- menu.add(0, MENU_ITEM_COUNTER + 2, 0, "结束");
- return super.onCreateOptionsMenu(menu);
- }
2、添加选择菜单项事件:在onOptionsItemSelected(MenuItem item)中 switch(item.getItemId()),然后添加对应选择事件
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case MENU_ITEM_COUNTER:
- myTextView.setText("You click " + item.getTitle().toString()
- + "Menu");
- break;
- case MENU_ITEM_COUNTER + 1:
- myTextView.setText("You click " + item.getTitle().toString()
- + "Menu");
- break;
- case MENU_ITEM_COUNTER + 2:
- myTextView.setText("You click " + item.getTitle().toString()
- + "Menu");
- break;
- default:
- break;
- }
- return super.onOptionsItemSelected(item);
- }
3(可选)、添加关闭菜单事件:onOptionsMenuClosed(Menu menu),在其中添加代码即可
4(可选)、添加准备菜单(菜单显示之前的事件),在其中添加代码即可
方法二:
1、添加菜单的样式:在res中创建menu目录,建立xml,
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/yang"
android:icon="@drawable/ic_launcher"
android:title="yang"/>
<item
android:id="@+id/xiao"
android:icon="@drawable/ic_launcher"
android:title="xiao"/>
<item
android:id="@+id/ru"
android:icon="@drawable/ic_launcher"
android:title="ru"/>
<item
android:id="@+id/de"
android:icon="@drawable/ic_launcher"
android:title="de"/>
</menu></span>
2、显示
重写onCreateOptionsMenu(Menu menu) ,getMenuInflater().inflate(R.menu.options_menu,menu):
a.inflate的作用是将xml定义的而一个布局找出来,但仅仅是找出来。
b.第一个参数是布局,第二个参数是菜单。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.my_menu, menu);
return true;
}
剩下的同上
2.contextMenu上下文菜单
概述:继承自Menu。与选项菜单不同的是:选项菜单服务于Activity,而上下文菜单是注册到某个View对象上的 ,长按View才可以显示出来。而且使用上下文菜单需要注册,否则无法显示。最后上下文菜单无法添加图标和快捷键。
- @Override
- public void onCreateContextMenu(ContextMenu menu, View v,
- ContextMenuInfo menuInfo) {
- //设置面积大一点,好点唉
- myTextView.setText("*******************************\n" + "要大一些看得才清楚的"
- + "*******************************\n");
- //itemId注意不要重复
- menu.add(0, 1, 0, "1白色");
- menu.add(0, 2, 0, "2红色");
- menu.add(0, 3, 0, "3蓝色");
- super.onCreateContextMenu(menu, v, menuInfo);
- }
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- //根据选择不同,对Text进行不同背景色的显示
- switch (item.getItemId()) {
- case 1:
- myTextView.setBackgroundColor(Color.WHITE);
- break;
- case 2:
- myTextView.setBackgroundColor(Color.RED);
- break;
- case 3:
- myTextView.setBackgroundColor(Color.BLUE);
- break;
- default:
- break;
- }
- return super.onContextItemSelected(item);
- }
最后注册一下
- //要记得在需要的控件上注册上下文菜单
- registerForContextMenu(myTextView);
3.subMenu子菜单
使用顺序:
1、 覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单
2、 调用SubMenu的add()方法,添加子菜单
3. 用SubMenu.setHeaderIcon(),和SubMenu.setHeadTitle()设置标题 和标题图片。
3、 覆盖onContextItemSelected()方法,响应子菜单的单击事件
//响应点击事件: