有时候我们希望创建的菜单项是单选菜单项或者多选菜单项,则可以调用MenuItem的如下方法
setCheckable(boolean checkable)
设置该菜单项是否可以被勾选,调用上面的方法之后的菜单项默认是多选菜单项
setGroupCheckable(int group,boolean checkable,boolean exclusive);
设置group组里的所有菜单项是否可以勾选,如果将exclusive设为true,那么他们将是一组单选菜单项
setAlphabeticShortcut(char alphaChar)
设置字母快捷键
setNumericShortCut(char numericChar)
设置字母快捷键
setShortCut(char numericChar,char alphaChar)
同时设置两种快捷键
点击菜单按钮,才会弹出菜单
xml文件无需改动
java文件
package com.example.checkablemenu;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text=(TextView) super.findViewById(R.id.text);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//创建车型菜单
SubMenu carStyle=menu.addSubMenu("车型");
//弹出框的标题
carStyle.setHeaderTitle("请选择车型");
//弹出框的图标
carStyle.setHeaderIcon(R.drawable.ic_launcher);
carStyle.add(0,0x111,0,"奔驰");
carStyle.add(0,0x112,0,"宝马");
carStyle.add(0,0x113,0,"奥迪");
carStyle.add(0,0x114,0,"大众");
//设置carStyle菜单内0组的菜单项为单选菜单项
/**
* setGroupCheckAble(int group,boolean checkable,boolean exclusive)
* 设置group组里的所有菜单项是否可以勾选
* exclusive设为true,将是一组单选菜单
*/
carStyle.setGroupCheckable(0, true, true);
//创建地区菜单
SubMenu area=menu.addSubMenu("地区");
area.setHeaderIcon(R.drawable.ic_launcher);
area.setHeaderTitle("选择地区");
area.add(0, 0x211, 0, "北京").setCheckable(true);
area.add(0, 0x212, 0, "上海").setCheckable(true);
area.add(0, 0x213, 0, "山东").setCheckable(true);
area.add(0, 0x214, 0, "杭州").setCheckable(true);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//判断是哪个多选菜单被点击了
switch(item.getItemId()){
case 0x211:
if(item.isChecked()){
item.setChecked(false);
}
else{
item.setChecked(true);
}
break;
case 0x212:
if(item.isChecked()){
item.setChecked(false);
}
else{
item.setChecked(true);
}
break;
case 0x213:
if(item.isChecked()){
item.setChecked(false);
}
else{
item.setChecked(true);
}
break;
case 0x214:
if(item.isChecked()){
item.setChecked(false);
}
else{
item.setChecked(true);
}
break;
}
return true;
}
}