Android开发学习之3大类菜单
在Android系统中,菜单可以分为三类:选项菜单(Option Menu),上下文菜单(Context Menu)以及子菜单(Sub Menu)。
一.选项菜单(Option Menu)
创建选项菜单的步骤:
1.覆盖Activity的onCreateOptionMenu(Menu menu)方法,当菜单第一次被打开时调用
2.调用Menu的add( )方法添加菜单项(MenuItem),同时可以调用MenuItem的setIcon( )方法来为菜单项设置图标
3.当菜单项(MenuItem)被选择时,覆盖Activity的onOptionsItemSelected(MenuItem item)来响应事件
选项菜单的实例:
- package com.android.menu.activity;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.Menu;
- import android.view.MenuItem;
- public class OptionMenuActivity extends Activity {
- //声明菜单项常量
- private static final int ITEM_1 = Menu.FIRST;
- private static final int ITEM_2 = Menu.FIRST+1;
- private static final int ITEM_3 = Menu.FIRST+2;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
- //覆盖onCreateOptionsMenu(Menu menu)来添加菜单项
- public boolean onCreateOptionsMenu(Menu menu) {
- //android.R使用的是系统自带的图标
- menu.add(0, ITEM_1, 0, "开始").setIcon(android.R.drawable.ic_media_play);
- menu.add(0, ITEM_2, 0, "帮助").setIcon(android.R.drawable.ic_menu_help);
- menu.add(0, ITEM_3, 0, "退出").setIcon(android.R.drawable.ic_menu_close_clear_cancel);
- return true;
- }
- //覆盖onOptionsItemSelected(MenuItem item)来响应菜单选项被单击事件
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case ITEM_1:
- setTitle("开始游戏!");
- break;
- case ITEM_2:
- setTitle("查看帮助!");
- break;
- case ITEM_3:
- setTitle("退出游戏!");
- break;
- }
- return true;
- }
- }
效果图:
二.上下文菜单(Context Menu)
创建上下文菜单的步骤:
1.覆盖Activity的onCreateOptionMenu(Menu menu)方法,调用Menu的add( )方法添加菜单项(MenuItem).
2.覆盖Activity的onOptionsItemSelected(MenuItem item)来响应事件
3.调用registerForContextMenu( )方法来为视图注册上下文菜单
上下文菜单的实例(按住“测试Context Menu”2秒,就会出现上下文菜单):
- package com.android.context.activity;
- import android.app.Activity;
- import android.graphics.Color;
- import android.os.Bundle;
- import android.view.ContextMenu;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.View;
- import android.view.ContextMenu.ContextMenuInfo;
- import android.widget.TextView;
- public class ContextMenuActivity extends Activity {
- private static final int ITME_1 = Menu.FIRST;
- private static final int ITME_2 = Menu.FIRST+1;
- private static final int ITME_3 = Menu.FIRST+2;
- private TextView text;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- text = (TextView)findViewById(R.id.TextView_1);
- //调用registerForContextMenu()来注册上下文菜单
- registerForContextMenu(text);
- }
- @Override
- public void onCreateContextMenu(ContextMenu menu, View v,
- ContextMenuInfo menuInfo) {
- menu.add(0, ITME_1, 0, "红色背景");
- menu.add(0, ITME_2, 0, "蓝色背景");
- menu.add(0, ITME_3, 0, "白色背景");
- }
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case ITME_1:
- //设置TextView的背景颜色
- text.setBackgroundColor(Color.RED);
- break;
- case ITME_2:
- text.setBackgroundColor(Color.BLUE);
- break;
- case ITME_3:
- text.setBackgroundColor(Color.WHITE);
- break;
- }
- return true;
- }
- }
效果图:
三.子菜单(Sub Menu)
创建子菜单的步骤:
1.覆盖Activity的onCreateOptionMenu(Menu menu)方法,调用Menu的addSubMenu( )方法来添加子菜单(Sub Menu)
2.调用SubMenu的add( )方法来添加子菜单(Sub Menu)
3.覆盖onContextItemSelect( )方法来响应菜单单击事件
子菜单的实例:
- package com.android.sub.activity;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.SubMenu;
- public class SubMenuActivity extends Activity {
- private static final int ITEM_1 = Menu.FIRST;
- private static final int ITEM_2 = Menu.FIRST+1;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
- //覆盖onCreateOptionsMenu(Menu menu)方法,添加子菜单项
- public boolean onCreateOptionsMenu(Menu menu) {
- SubMenu ad = menu.addSubMenu("添加").setIcon(android.R.drawable.ic_menu_add);
- SubMenu re = menu.addSubMenu("关闭").setIcon(android.R.drawable.ic_menu_close_clear_cancel);
- ad.add(0, ITEM_1, 0, "文件");
- ad.add(0, ITEM_2, 0, "图片");
- return true;
- }
- //覆盖onOptionsItemSelected(MenuItem item),响应菜单选项被单击事件
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case ITEM_1:
- setTitle("添加文件!");
- break;
- case ITEM_2:
- setTitle("添加图片!");
- break;
- }
- return true;
- }
- }
效果图:
注:menu.add的方法中的参数:
1.int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。可以用到的方法有:
removeGroup(id)
setGroupCheckable(id, checkable, exclusive)
setGroupEnabled(id,boolean enabled)
setGroupVisible(id,visible)
2.int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个Menu中的选项。在后面使用菜单的时候,就是靠这个item ID来判断,你选中的是哪个选项。
3.int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的顺序来显示。
4.String类型的title参数,表示选项中显示的文字。
Android开发学习之3大类菜单的更多相关文章
- Android开发学习总结(一)——搭建最新版本的Android开发环境
Android开发学习总结(一)——搭建最新版本的Android开发环境(转) 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是 ...
- Android开发学习路线的七个阶段和步骤
Android开发学习路线的七个阶段和步骤 Android学习参考路线 第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和St ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- Android开发学习路线图
Android开发学习方法: Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大.因此,一个好的学习方法对我们学习Android开发很重要. 在此建议, ...
- Android开发学习之LauncherActivity开发启动的列表
Android开发学习之LauncherActivity开发启动的列表 创建项目:OtherActivity 项目运行结果: 建立主Activity:OtherActivity.java [jav ...
- Android开发学习必备的java知识
Android开发学习必备的java知识本讲内容:对象.标识符.关键字.变量.常量.字面值.基本数据类型.整数.浮点数.布尔型.字符型.赋值.注释 Java作为一门语言,必然有他的语法规则.学习编程语 ...
- Android开发学习之路--Android Studio cmake编译ffmpeg
最新的android studio2.2引入了cmake可以很好地实现ndk的编写.这里使用最新的方式,对于以前的android下的ndk编译什么的可以参考之前的文章:Android开发学习之路– ...
- Android开发学习之路--网络编程之xml、json
一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载 ...
- Android开发学习之路--Android系统架构初探
环境搭建好了,最简单的app也运行过了,那么app到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究研究.这里从芯片及硬件模块-& ...
随机推荐
- 纯净版xp系统在局域网共享需要密码如何解决
纯净版xp系统在局域网共享需要密码怎么办?这是近来不少朋友都向小编反馈的问题.他们表示每次共享者更改密码后其他人都需要再重新输入密码,感觉十分的麻烦.下面是系统城小编给大家整理的一些有关XP系统局域网 ...
- c# winform编程之多线程ui界面资源修改总结篇【转】
c# winform编程之多线程ui界面资源修改总结篇 单线程的winfom程序中,设置一个控件的值是很easy的事情,直接 this.TextBox1.value = "Hello Wor ...
- C#中的集合(HashTable与Array类)
一.Array类 1.Array类的属性 序号 属性 & 描述 1 IsFixedSize 获取一个值,该值指示数组是否带有固定大小. 2 IsReadOnly 获取一个值,该值指示数组是否只 ...
- iOS开发-Xcode入门ObjC程序
元旦三天假跟妹子冷战一天半,剩下的半天觉得无聊,可以写点东西,折腾了下xCode 6.1,虽然iPhone6比较丑,但是不影响IOS在高端机上面的地位,ObjC是扩充C的面向对象编程语言.主要使用于M ...
- HDU 3535 AreYouBusy(混合背包)
HDU3535 AreYouBusy(混合背包) http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意: 给你n个工作集合,给你T的时间去做它们.给你m和 ...
- 从头认识java-特辑-你不知道的main函数
这一章节我们来讨论一下main函数. 对于这个函数大家都不陌生,并且都习以为常.可是当中有一些东西,还是值得我们去总结的. 1.普通的main package com.ray.test; public ...
- 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(八)
[重构](续) 牌的表示: 一副牌有52张,可用一整数数组描述.但是由于在游戏过程中牌数在不断减少,所以用一表示剩余张数的整数和一整数数组共同描述.C99支持一种变量长度数组,但用在这里并没有什么特别 ...
- c语言訪问excel
直接通过格式化读取文件就可实现,见附件
- Linux c 管道文件-进程间的通信 mkfifo、pipe
管道文件: 1. 创建管道mkfifo(命名管道) #include<sys/stat.h> int mkfifo( const char *pathname, mode_ ...
- Spring中依赖注入的四种方式
在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入 这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的sett ...