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();
}
下面是此程序运行的结果,大家可以对照着代码观察效果:
二、上下文菜单
上下文菜单是注册到某个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菜单详解相关推荐
- android服务的应用,Android学习指南之十四:Service详解及应用实例
上一节讲到了Gallery画廊,本节主要讲解Android组件Service,主要内容包括:Service的概念.生命周期及其应用实例. 一.Service简介 Service是Android程序中四 ...
- Android开发中dip,dpi,density,px等详解
Android开发中的各种单位的解释 Px (Pixel像素) 也称为图像元素,是作为图像构成的基本单元,单个像素的大小并不固定,跟随屏幕大小和像素数量的关系变化(屏幕越大,像素越低,单个像素越大,反 ...
- 系统学习NLP(二十六)--BERT详解
转自:https://zhuanlan.zhihu.com/p/48612853 前言 BERT(Bidirectional Encoder Representations from Transfor ...
- Android开发之第三方推送JPush极光推送知识点详解 学会集成第三方SDK推送
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 下面是一些知识点介绍,后期将会带领大家进行代码实战: 一.Android实现推送方式解决方案: 1.推 ...
- Android开发之如何在App间安全地共享文件(FileProvider详解)?
[版权申明]非商业目的可自由转载 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/103125707 出自:shusheng007 相关 ...
- pytorch学习笔记(十二):详解 Module 类
Module 是 pytorch 提供的一个基类,每次我们要 搭建 自己的神经网络的时候都要继承这个类,继承这个类会使得我们 搭建网络的过程变得异常简单. 本文主要关注 Module 类的内部是怎么样 ...
- 《Pytorch学习指南》- Dataset和Dataloader用法详解
目录 前言 DataSet DataLoader 数据构建 1. 创建Dataset 类 :sparkles: 2. 读取数据 :ambulance: 3. 返回数据 :zap: 读取数据 :art: ...
- 《数据结构与算法》(十六)- “查找”详解
目录 前言 1. 查找概论 2. 顺序表查找 2.1 顺序表查找算法 2.2 顺序表找优化 3. 有序表查找 3.1 折半查找 3.2 插值查找 3.3 斐波那契查找 4. 线性索引查找 4.1 稠密 ...
- Go语言教程第十六集 GORM详解
GORM介绍和使用 什么是ORM Object Relational Mapping:对象关系映射 结构体 和 SQL数据库存在映射,这个时候就有了ORM语句 一句话说:就是将数据库中的表数据 和 结 ...
最新文章
- ArcEngine的ToolbarControl解析
- Nvidia TX2 安装中文输入法
- 如何使用VirtualBox与GNS3搭建思科设备实验环境
- Hadoop综合大作业补交4次作业:获取全部校园新闻,网络爬虫基础练习,中文词频统计,熟悉常用的Linux操作...
- eDrawings Pro 2020中文版
- SAP Kyma的environmment和SAP 云平台的Global Account
- 面向对象编程(六):数据封装
- 对于employees表中,给出奇数行的first_name
- 在线制作车牌效果图_价格低的防火板材行业专家在线为您服务
- Golang 实现文件内容差异比较
- CCF CSP认证201509-1数列分段
- 最新影视双端app对接苹果cms+详细安装教程
- 新疆计算机一级考试excel公式,2020年XX专业技术人员继续教育公需课《Excel快速统计》试题及答案...
- 【新概念二】 28-No parking
- 打峡谷之巅有眼缘 那不如我们自己写个猜数字 C语言
- Markdown KeTex 德尔塔等于符
- 纯前端实现xls表格下载
- word2019安装mythtype后出现“不受信任的位置及禁用宏”问题解决办法
- STM32蓝牙控制循迹避障小车源代码——3.舵机、超声波测距模块
- SBW(线控转向系统Matlab/Simulink模型搭建)
热门文章
- NT系统DOS网络命令记录
- 指南--安装 NVU HTML 编辑器
- 【一周入门MySQL—5】
- 黑火药跟黄火药的区别在哪里?
- Swift vs. Objective-C:未来看好Swift的十个理由
- SAP系统上线支持维护制度
- oracle用dba登陆怎么登,以SQLDBA身份登录isqlplus
- win2003能装mysql_Windows2003系统安装mysql小结
- mysql的dml全,MySQL数据管理----DML语言(全记住)(示例代码)
- Echarts开源可视化库学习(二)常用图表的实现与效果