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();

}

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

二、上下文菜单

上下文菜单是注册到某个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上下文菜单实例的运行效果:

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

2012年7月23日

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

  1. android服务的应用,Android学习指南之十四:Service详解及应用实例

    上一节讲到了Gallery画廊,本节主要讲解Android组件Service,主要内容包括:Service的概念.生命周期及其应用实例. 一.Service简介 Service是Android程序中四 ...

  2. Android开发中dip,dpi,density,px等详解

    Android开发中的各种单位的解释 Px (Pixel像素) 也称为图像元素,是作为图像构成的基本单元,单个像素的大小并不固定,跟随屏幕大小和像素数量的关系变化(屏幕越大,像素越低,单个像素越大,反 ...

  3. 系统学习NLP(二十六)--BERT详解

    转自:https://zhuanlan.zhihu.com/p/48612853 前言 BERT(Bidirectional Encoder Representations from Transfor ...

  4. Android开发之第三方推送JPush极光推送知识点详解 学会集成第三方SDK推送

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 下面是一些知识点介绍,后期将会带领大家进行代码实战: 一.Android实现推送方式解决方案: 1.推 ...

  5. Android开发之如何在App间安全地共享文件(FileProvider详解)?

    [版权申明]非商业目的可自由转载 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/103125707 出自:shusheng007 相关 ...

  6. pytorch学习笔记(十二):详解 Module 类

    Module 是 pytorch 提供的一个基类,每次我们要 搭建 自己的神经网络的时候都要继承这个类,继承这个类会使得我们 搭建网络的过程变得异常简单. 本文主要关注 Module 类的内部是怎么样 ...

  7. 《Pytorch学习指南》- Dataset和Dataloader用法详解

    目录 前言 DataSet DataLoader 数据构建 1. 创建Dataset 类 :sparkles: 2. 读取数据 :ambulance: 3. 返回数据 :zap: 读取数据 :art: ...

  8. 《数据结构与算法》(十六)- “查找”详解

    目录 前言 1. 查找概论 2. 顺序表查找 2.1 顺序表查找算法 2.2 顺序表找优化 3. 有序表查找 3.1 折半查找 3.2 插值查找 3.3 斐波那契查找 4. 线性索引查找 4.1 稠密 ...

  9. Go语言教程第十六集 GORM详解

    GORM介绍和使用 什么是ORM Object Relational Mapping:对象关系映射 结构体 和 SQL数据库存在映射,这个时候就有了ORM语句 一句话说:就是将数据库中的表数据 和 结 ...

最新文章

  1. ArcEngine的ToolbarControl解析
  2. Nvidia TX2 安装中文输入法
  3. 如何使用VirtualBox与GNS3搭建思科设备实验环境
  4. Hadoop综合大作业补交4次作业:获取全部校园新闻,网络爬虫基础练习,中文词频统计,熟悉常用的Linux操作...
  5. eDrawings Pro 2020中文版
  6. SAP Kyma的environmment和SAP 云平台的Global Account
  7. 面向对象编程(六):数据封装
  8. 对于employees表中,给出奇数行的first_name
  9. 在线制作车牌效果图_价格低的防火板材行业专家在线为您服务
  10. Golang 实现文件内容差异比较
  11. CCF CSP认证201509-1数列分段
  12. 最新影视双端app对接苹果cms+详细安装教程
  13. 新疆计算机一级考试excel公式,2020年XX专业技术人员继续教育公需课《Excel快速统计》试题及答案...
  14. 【新概念二】 28-No parking
  15. 打峡谷之巅有眼缘 那不如我们自己写个猜数字 C语言
  16. Markdown KeTex 德尔塔等于符
  17. 纯前端实现xls表格下载
  18. word2019安装mythtype后出现“不受信任的位置及禁用宏”问题解决办法
  19. STM32蓝牙控制循迹避障小车源代码——3.舵机、超声波测距模块
  20. SBW(线控转向系统Matlab/Simulink模型搭建)

热门文章

  1. NT系统DOS网络命令记录
  2. 指南--安装 NVU HTML 编辑器
  3. 【一周入门MySQL—5】
  4. 黑火药跟黄火药的区别在哪里?
  5. Swift vs. Objective-C:未来看好Swift的十个理由
  6. SAP系统上线支持维护制度
  7. oracle用dba登陆怎么登,以SQLDBA身份登录isqlplus
  8. win2003能装mysql_Windows2003系统安装mysql小结
  9. mysql的dml全,MySQL数据管理----DML语言(全记住)(示例代码)
  10. Echarts开源可视化库学习(二)常用图表的实现与效果