android开发菜单,Android学习指南之十六:Android菜单详解

Android用户界面的组成除了View外,还包括菜单和对话框,本节我们先来学习一下菜单的使用方法。

菜单Menu是Android用户界面中最常见的元素之一,使用非常频繁。Android菜单主要分为三类:选项菜单(Options Menu)、上下文菜单(Context Menu)、子菜单(Submenu)。

一、选项菜单和子菜单

一个Menu对象代表一个菜单,Menu中可添加菜单项MenuItem,也可以添加子菜单SubMenu。

Java代码@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

@Override

publicbooleanonCreateOptionsMenu(Menu menu) {

// TODO Auto-generated method stub

//添加性别子菜单

SubMenu subMenuGender=menu.addSubMenu(MAIN_GROUP, MENU_GENDER,0,"性别");

subMenuGender.setIcon(R.drawable.gender);

subMenuGender.setHeaderIcon(R.drawable.gender);

male=subMenuGender.add(GENDER_GROUP,MENU_GENDER_MALE,0,"男");//为子菜单添加选项

male.setChecked(true);//设置默认选项

subMenuGender.add(GENDER_GROUP,MENU_GENDER_FEMALE,0,"女");//为子菜单添加选项

subMenuGender.setGroupCheckable(GENDER_GROUP,true,true);//设置GENDER_GROUP组是可选的、互斥的

//添加兴趣子菜单

SubMenu subMenuHobby=menu.addSubMenu(MAIN_GROUP, MENU_HOBBY,1,"爱好");

subMenuHobby.setIcon(R.drawable.hobby);

miaHobby[0]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY1,0,"游泳");

miaHobby[1]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY2,1,"篮球");

miaHobby[2]=subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY3,2,"跑步");

miaHobby[0].setCheckable(true);

miaHobby[1].setCheckable(true);

miaHobby[2].setCheckable(true);//设置为可多选

MenuItem ok=menu.add(MAIN_GROUP, MENU_OK,3,"确定");//为主菜单添加选项菜单

OnMenuItemClickListener lsn=newOnMenuItemClickListener() {

@Override

publicbooleanonMenuItemClick(MenuItem item) {

// TODO Auto-generated method stub

appendStateStr();

returntrue;

}

};

ok.setOnMenuItemClickListener(lsn);

ok.setAlphabeticShortcut('o');//给确定菜单设置字符快捷键

returntrue;

}

@Override

publicbooleanonOptionsItemSelected(MenuItem item) {

// TODO Auto-generated method stub

switch(item.getItemId()){

caseMENU_GENDER_MALE:

caseMENU_GENDER_FEMALE:

item.setChecked(true);

appendStateStr();

break;

caseMENU_HOBBY1:

caseMENU_HOBBY2:

caseMENU_HOBBY3:

item.setChecked(!item.isChecked());

appendStateStr();

break;

}

returntrue;

}

privatevoidappendStateStr() {

// TODO Auto-generated method stub

String result="您选择的性别是:";

if(male.isChecked()){

result+="男";

}else{

result+="女";

}

String hobbyStr="";

for(MenuItem mi:miaHobby){

if(mi.isChecked()){

hobbyStr+=mi.getTitle()+"、";

}

}

if(hobbyStr.length()>0){

result+=",您的爱好为:"+hobbyStr.substring(0,hobbyStr.length()-1)+".\n";

}else{

resultresult=result+".\n";

}

Toast.makeText(mainActivity.this, result, Toast.LENGTH_LONG).show();

}

下面是此程序运行的结果,大家可以对照着代码观察效果:

b3a8f2ef11d363878c16a22620798456.gif

2817c35618270e93576ba0cbd4c21b58.gif

22399a5438a40d99b5f5e0973555a9f0.gif

fea5c337134a6a0daa718b283de77623.gif

二、上下文菜单

上下文菜单是注册到某个View对象上的,如果一个View对象注册了上下文菜单,用户可通过长按该View对象弹出上下文菜单.

首先在onCreateContextMenu中为不同空间配置不同的上下文菜单:

Java代码@Override

publicvoidonCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {

// TODO Auto-generated method stub

super.onCreateContextMenu(menu, v, menuInfo);

menu.setHeaderIcon(R.drawable.bird);

if(v==findViewById(R.id.editview01)){

menu.add(0,1,0,"菜单项1");

menu.add(0,2,0,"菜单项2");

menu.add(0,3,0,"菜单项3");

}elseif(v==findViewById(R.id.editview02)){

menu.add(0,4,0,"菜单项4");

menu.add(0,5,0,"菜单项5");

}

}

在onCreate方法中为两个文本框注册上下文菜单:

Java代码@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

this.registerForContextMenu(findViewById(R.id.editview01));

this.registerForContextMenu(findViewById(R.id.editview02));

}

添加上下文菜单监听事件:

Java代码@Override

publicbooleanonContextItemSelected(MenuItem item) {

// TODO Auto-generated method stub

switch(item.getItemId()){

case1:

case2:

case3:

Toast.makeText(mainActivity.this,"这是第一个EditView的上下文菜单"+item.getTitle(), Toast.LENGTH_LONG).show();

case4:

case5:

Toast.makeText(mainActivity.this,"这是第二个EditView的上下文菜单"+item.getTitle(), Toast.LENGTH_LONG).show();

}

returnsuper.onContextItemSelected(item);

}

下面两图是Android上下文菜单实例的运行效果:

7ea330e7619e5a89b19f140107717d1f.gif

b3e36388c1941d196b92693beb98400e.gif

通过三种Android菜单的详细讲解,大家应该对菜单的使用有所了解了,在以后的Android开发过程中可以多熟悉下。

2012年7月23日

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值