Android开发学习笔记:浅谈3大类菜单-阿里云开发者社区

开发者社区> 科技小能手> 正文

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)来响应事件

选项菜单的实例:


  1. package com.android.menu.activity;  
  2.  
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.Menu;  
  6. import android.view.MenuItem;  
  7.  
  8. public class OptionMenuActivity extends Activity {  
  9.  
  10.     //声明菜单项常量  
  11.     private static final int ITEM_1 = Menu.FIRST;  
  12.     private static final int ITEM_2 = Menu.FIRST+1;  
  13.     private static final int ITEM_3 = Menu.FIRST+2;  
  14.     public void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.main);  
  17.     }  
  18.  
  19.     //覆盖onCreateOptionsMenu(Menu menu)来添加菜单项  
  20.     public boolean onCreateOptionsMenu(Menu menu) {  
  21.         //android.R使用的是系统自带的图标  
  22.         menu.add(0, ITEM_1, 0"开始").setIcon(android.R.drawable.ic_media_play);  
  23.         menu.add(0, ITEM_2, 0"帮助").setIcon(android.R.drawable.ic_menu_help);  
  24.         menu.add(0, ITEM_3, 0"退出").setIcon(android.R.drawable.ic_menu_close_clear_cancel);  
  25.         return true;  
  26.     }  
  27.       
  28.    //覆盖onOptionsItemSelected(MenuItem item)来响应菜单选项被单击事件  
  29.     public boolean onOptionsItemSelected(MenuItem item) {  
  30.         switch (item.getItemId()) {  
  31.         case ITEM_1:  
  32.             setTitle("开始游戏!");  
  33.             break;  
  34.         case ITEM_2:  
  35.             setTitle("查看帮助!");  
  36.             break;  
  37.         case ITEM_3:  
  38.             setTitle("退出游戏!");  
  39.             break;  
  40.         }  
  41.         return true;  
  42.     }  

效果图:

二.上下文菜单(Context Menu)

 创建上下文菜单的步骤:

1.覆盖Activity的onCreateOptionMenu(Menu menu)方法,调用Menu的add( )方法添加菜单项(MenuItem).

2.覆盖Activity的onOptionsItemSelected(MenuItem item)来响应事件

3.调用registerForContextMenu( )方法来为视图注册上下文菜单

上下文菜单的实例(按住“测试Context Menu”2秒,就会出现上下文菜单):


  1. package com.android.context.activity;  
  2.  
  3. import android.app.Activity;  
  4. import android.graphics.Color;  
  5. import android.os.Bundle;  
  6. import android.view.ContextMenu;  
  7. import android.view.Menu;  
  8. import android.view.MenuItem;  
  9. import android.view.View;  
  10. import android.view.ContextMenu.ContextMenuInfo;  
  11. import android.widget.TextView;  
  12.  
  13. public class ContextMenuActivity extends Activity {  
  14.     private static final int ITME_1 = Menu.FIRST;  
  15.     private static final int ITME_2 = Menu.FIRST+1;  
  16.     private static final int ITME_3 = Menu.FIRST+2;  
  17.     private TextView text;  
  18.       
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.main);  
  22.         text = (TextView)findViewById(R.id.TextView_1);  
  23.         //调用registerForContextMenu()来注册上下文菜单  
  24.         registerForContextMenu(text);  
  25.     }  
  26.  
  27.     @Override 
  28.     public void onCreateContextMenu(ContextMenu menu, View v,  
  29.             ContextMenuInfo menuInfo) {  
  30.         menu.add(0, ITME_1, 0"红色背景");  
  31.         menu.add(0, ITME_2, 0"蓝色背景");  
  32.         menu.add(0, ITME_3, 0"白色背景");  
  33.     }  
  34.       
  35.     @Override 
  36.     public boolean onContextItemSelected(MenuItem item) {  
  37.         switch (item.getItemId()) {  
  38.         case ITME_1:  
  39.             //设置TextView的背景颜色  
  40.             text.setBackgroundColor(Color.RED);  
  41.             break;  
  42.         case ITME_2:  
  43.             text.setBackgroundColor(Color.BLUE);  
  44.             break;  
  45.         case ITME_3:  
  46.             text.setBackgroundColor(Color.WHITE);  
  47.             break;  
  48.         }  
  49.         return true;  
  50.     }  

效果图:

 三.子菜单(Sub Menu)

创建子菜单的步骤:

1.覆盖Activity的onCreateOptionMenu(Menu menu)方法,调用Menu的addSubMenu( )方法来添加子菜单(Sub Menu)

2.调用SubMenu的add( )方法来添加子菜单(Sub Menu)

3.覆盖onContextItemSelect( )方法来响应菜单单击事件

子菜单的实例:


  1. package com.android.sub.activity;  
  2.  
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.Menu;  
  6. import android.view.MenuItem;  
  7. import android.view.SubMenu;  
  8.  
  9. public class SubMenuActivity extends Activity {  
  10.       
  11.     private static final int ITEM_1 = Menu.FIRST;  
  12.     private static final int ITEM_2 = Menu.FIRST+1;  
  13.       
  14.     public void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.main);  
  17.     }  
  18.  
  19.     //覆盖onCreateOptionsMenu(Menu menu)方法,添加子菜单项  
  20.     public boolean onCreateOptionsMenu(Menu menu) {  
  21.         SubMenu ad = menu.addSubMenu("添加").setIcon(android.R.drawable.ic_menu_add);  
  22.         SubMenu re = menu.addSubMenu("关闭").setIcon(android.R.drawable.ic_menu_close_clear_cancel);  
  23.         ad.add(0, ITEM_1, 0"文件");  
  24.         ad.add(0, ITEM_2, 0"图片");  
  25.         return true;  
  26.     }  
  27.       
  28.    //覆盖onOptionsItemSelected(MenuItem item),响应菜单选项被单击事件  
  29.     public boolean onOptionsItemSelected(MenuItem item) {  
  30.         switch (item.getItemId()) {  
  31.         case ITEM_1:  
  32.             setTitle("添加文件!");  
  33.             break;  
  34.         case ITEM_2:  
  35.             setTitle("添加图片!");  
  36.             break;  
  37.         }  
  38.         return true;  
  39.     }  

效果图:

注: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参数,表示选项中显示的文字。



本文转自 lingdududu 51CTO博客,原文链接: 

http://blog.51cto.com/liangruijun/641275

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
小技巧:为 Eclipse 设置链式调用的代码格式化(Formatter)
小技巧:为 Eclipse 设置链式调用的代码格式化(Formatter)
4 0
SAP Cloud for Customer的Container应用设计原理
SAP Cloud for Customer的Container应用设计原理
5 0
Java 并发编程(一):摩拳擦掌
Java 并发编程(一):摩拳擦掌
4 0
从百度“脸优”看人脸识别技术 或将开启中国技术驱动革命
人脸识别技术,听起来是不是很炫?事实上,目前人脸识别已经不是技术上的空谈,已经有很多领域正在或将要实现人脸识别技术应用。譬如安防、银行等领域,人脸识别最容易应用的就是安全领域。除了这些公共单位,有没有面向大众的应用?答案是肯定的,百度世界大会发布的脸优就是这样一款产品。
2 0
@程序员,你该如何选择技术方向?
@程序员,你该如何选择技术方向?
3 0
教妹学 Java:动态伴侣 Groovy
教妹学 Java:动态伴侣 Groovy
4 0
Maven入门,读这篇文章就够了(1)
Maven入门,读这篇文章就够了
5 0
Cordova工程里android平台相关的index.html是怎么加载的
Cordova工程里android平台相关的index.html是怎么加载的
5 0
不看好的Android火了,看好的WebOS死了
不看好的Android火了,看好的WebOS死了
5 0
增强的字节码反编译工具:Enhanced Class Decompiler
增强的字节码反编译工具:Enhanced Class Decompiler
6 0
14426
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载