android学习笔记(43)android创建单选菜单和复选菜单

文章标签: android,android-menu
2015-1-12 10:11:56     人阅读    

创建单选菜单和复选菜单
在某些时候,如果我们希望所创建的菜单项是单选菜单项或多选菜单项,则可以调用Menultem的如下方法。
setCheckable(boolean checkable):设置该菜单项是否可以被勾选。
调用上面的方法后的菜单项默认是多选菜单项。
如果希望将一组菜单里的菜单项都设为可勾选的菜单项,则可调用如下方法。
setGroupCheckable(int group, boolean checkable, boolean exclusive):设置 group组里的所有菜单项是否可勾选;如果将exclusive设为true,那么它们将是一组单选菜单项。
除此之外,Android还为Menultem提供了如下方法来设置快捷键。
setAlphabeticShortcut(char alphaChar):设置字母快捷键。
setNumericShortcut(char numericChar):设置数字快捷键。
setShortcut(char numericChar, char alphaChar);同时设置两种快捷键。
下面的程序示范了如何幵发复选菜单项和单选菜单项。
程序清单:codes\02\2.7\CheckableMenu\src\org\crazyit\menu\CheckableMenu.java

package org.crazyit.menu;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.EditText;
public class CheckableMenu extends Activity
{
 // 定义性别菜单项的标识
 final int MALE = 0x111;
 final int FEMALE = 0x112;
 // 定义颜色菜单项的标识
 final int RED = 0x113;
 final int GREEN = 0x114;
 final int BLUE = 0x115;
 //定义3个颜色菜单项
 MenuItem[] items = new MenuItem[3];
 String[] colorNames = new String[]{"红色", "绿色" , "蓝色"};
 private EditText edit;
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  edit = (EditText) findViewById(R.id.txt);
 }
 @Override
 public boolean onCreateOptionsMenu(Menu menu)
 {
  // -------------向menu中添加选择性别的子菜单-------------
  SubMenu genderMenu = menu.addSubMenu("您的性别");
  // 设置菜单的图标
  genderMenu.setIcon(R.drawable.gender);
  // 设置菜单头的图标
  genderMenu.setHeaderIcon(R.drawable.gender);
  // 设置菜单头的标题
  genderMenu.setHeaderTitle("选择您的性别"); 
  genderMenu.add(0, MALE,  0, "男性");
  genderMenu.add(0, FEMALE, 0, "女性");
  //设置genderMenu菜单内0组菜单项为单选菜单项
  genderMenu.setGroupCheckable(0 , true , true);
  // -------------向menu中添加颜色的子菜单-------------
  SubMenu colorMenu = menu.addSubMenu("喜欢的颜色");
  colorMenu.setIcon(R.drawable.color);
  // 设置菜单头的图标
  colorMenu.setHeaderIcon(R.drawable.color);
  // 设置菜单头的标题
  colorMenu.setHeaderTitle("选择您最喜欢的颜色");
  //添加菜单项,并设置它为可勾选的菜单项
  items[0] = colorMenu.add(0, RED, 0, colorNames[0])
   .setCheckable(true);
  //添加菜单项,并设置它为可勾选的菜单项
  items[1] = colorMenu.add(0, BLUE, 0, colorNames[1])
   .setCheckable(true);  
  //添加菜单项,并设置它为可勾选的菜单项
  items[2] = colorMenu.add(0, GREEN, 0, colorNames[2])
   .setCheckable(true);
  //设置快捷键
  items[2].setAlphabeticShortcut('u');
  return super.onCreateOptionsMenu(menu);
 }
 @Override
 // 菜单项被单击后的回调方法
 public boolean onOptionsItemSelected(MenuItem mi)
 {
  //判断单击的是哪个菜单项,并针对性的作出响应。
  switch (mi.getItemId())
  {
   case MALE:
    edit.setText("您的性别为:男");
    //必须通过代码来改变勾选状态
    mi.setChecked(true);
    break;
   case FEMALE:
    edit.setText("您的性别为:女");
    //必须通过代码来改变勾选状态
    mi.setChecked(true);
    break;
   case RED:
    //必须通过代码来改变勾选状态
    if(mi.isChecked())
    {
     mi.setChecked(false);
    }
    else
    {
     mi.setChecked(true);
    }    
    showColor();
    break;
   case GREEN:
    //必须通过代码来改变勾选状态
    if(mi.isChecked())
    {
     mi.setChecked(false);
    }
    else
    {
     mi.setChecked(true);
    }
    showColor();
    break;
   case BLUE:
    //必须通过代码来改变勾选状态
    if(mi.isChecked())
    {
     mi.setChecked(false);
    }
    else
    {
     mi.setChecked(true);
    }
    showColor();
    break;
  }
  return true;
 }
 private void showColor()
 {
  String result = "您喜欢的颜色有:";
  for (int i = 0 ; i < items.length ; i++)
  {
   if(items[i].isChecked())
   {
    result += colorNames[i] + "、";
   }
  }
  edit.setText(result);
 }
}

上面的程序中①号代码将指定菜单、指定菜单组内的两个菜单设为单选菜单项,接下来 的三行字代码用于将指定菜单项设为可勾选的菜单。
需要指出,可勾选菜单的勾选菜单必须由程序代码来控制,所以上面的程序中代 码自己控制了菜单项勾选状态的切换。这一点是笔者感到很奇怪的地方:为何Android系统 不为我们处理这些细节?这些细节给我们编程带来了不少烦琐的处理。


原文地址:http://www.itmmd.com/201501/476.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

java.lang.NumberFormatException: Invalid int: “” in cursor in Android   上一篇
下一篇  android学习笔记(42)android使用监听器来监听菜单事件
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!