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
相关文章
|
4天前
|
编解码 Java Android开发
通义灵码:在安卓开发中提升工作效率的真实应用案例
本文介绍了通义灵码在安卓开发中的应用。作为一名97年的聋人开发者,我在2024年Google Gemma竞赛中获得了冠军,拿下了很多项目竞赛奖励,通义灵码成为我的得力助手。文章详细展示了如何安装通义灵码插件,并通过多个实例说明其在适配国际语言、多种分辨率、业务逻辑开发和编程语言转换等方面的应用,显著提高了开发效率和准确性。
|
2天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
14 5
|
1天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
2天前
|
缓存 数据库 Android开发
安卓开发中的性能优化技巧
【10月更文挑战第29天】在移动应用的海洋中,性能是船只能否破浪前行的关键。本文将深入探讨安卓开发中的性能优化策略,从代码层面到系统层面,揭示如何让应用运行得更快、更流畅。我们将以实际案例和最佳实践为灯塔,引领开发者避开性能瓶颈的暗礁。
10 3
|
5天前
|
存储 IDE 开发工具
探索Android开发之旅:从新手到专家
【10月更文挑战第26天】在这篇文章中,我们将一起踏上一段激动人心的旅程,探索如何在Android平台上从零开始,最终成为一名熟练的开发者。通过简单易懂的语言和实际代码示例,本文将引导你了解Android开发的基础知识、关键概念以及如何实现一个基本的应用程序。无论你是编程新手还是希望扩展你的技术栈,这篇文章都将为你提供价值和启发。让我们开始吧!
|
10天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
38 5
|
9天前
|
设计模式 IDE Java
探索安卓开发:从新手到专家的旅程
【10月更文挑战第22天】 在数字时代的浪潮中,移动应用开发如同一座金矿,吸引着无数探险者。本文将作为你的指南针,指引你进入安卓开发的广阔天地。我们将一起揭开安卓平台的神秘面纱,从搭建开发环境到掌握核心概念,再到深入理解安卓架构。无论你是初涉编程的新手,还是渴望进阶的开发者,这段旅程都将为你带来宝贵的知识和经验的财富。让我们开始吧!
|
18天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
64 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
2天前
|
前端开发 Java 测试技术
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
5 0
|
9天前
|
搜索推荐 Android开发 UED
安卓开发中的自定义视图:打造个性化用户界面
【10月更文挑战第22天】在安卓应用的海洋中,如何让你的应用脱颖而出?一个独特且直观的用户界面(UI)至关重要。本文将引导你通过自定义视图来打造个性化的用户体验,从基础的视图绘制到触摸事件的处理,我们将一步步深入探讨。准备好了吗?让我们开始吧!