有时候我们希望创建的菜单项是单选菜单项或者多选菜单项,则可以调用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; } }