热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Android三种菜单实例分析

这篇文章主要介绍了Android三种菜单,较为详细的分析了Android菜单分类及相关使用技巧,需要的朋友可以参考下

本文实例讲述了Android的三种菜单。分享给大家供大家参考。具体分析如下:

Android的菜单分为三种类型:选项菜单(Option Menu)、上下文菜单(Context Menu)、子菜单(Sub Menu)

一.选项菜单

当用户单击设备上的菜单按钮(Menu),触发事件弹出的菜单就是选项菜单。选项菜单最多只有六个,超过六个第六个就会自动显示 更多 选项来展示显示。
创建方法:

1、覆盖Activity的onCreateOptionsMenu(Menu menu)方法,当我们第一次打开菜单时调用。
2、调用Menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法为菜单项设置图标。
3、当菜单项(MenuItem)被选中时,覆盖Acitivy的onOptionsMenuSelected()方法响应事件。

二、上下文菜单

当用户长按Activity页面时,弹出的菜单我们称为上下文菜单。我们经常在Windows中用鼠标右键单击弹出的菜单就是上下文菜单。

1、覆盖Activity的onCreateContextMenu()方法,调用Menu的add方法添加菜单项MenuItem
2、覆盖onContextItemSelected()方法,响应菜单单击事件
3、调用registerForContextMenu()方法,为视图注册上下文菜单

三、子菜单

子菜单就是将相同功能的分组进行多级显示的一种菜单,比如,Windows的“文件”菜单中就有“新建”,“打开”,“关闭”等子菜单。

创建子菜单的方法

1、覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法添加子菜单项
2、调用SubMenu的add()饭饭,添加子菜单项
3、覆盖onCreateItemSelected()方法,响应菜单单击事件

public class Main extends Activity { 
// 菜单项ID 
// FIRST为Menu类中的整形常量 
private static final int ITEM1 = Menu.FIRST; 
private static final int ITEM2 = Menu.FIRST + 1; 
private static final int ITEM3 = Menu.FIRST + 2; 
private static final int ITEM4 = Menu.FIRST + 3; 
private static final int ITEM5 = Menu.FIRST + 4; 
private static final int ITEM6 = Menu.FIRST + 5; 
private static final int ITEM7 = Menu.FIRST + 6; 
TextView myTV; 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    myTV = (TextView) findViewById(R.id.myTV); 
    // 此时为myTv设置上下文菜单,长按TextView时响应函数 
    registerForContextMenu(myTV); 
  } 
@Override 
// 点击菜单按钮响应的事件 
public boolean onCreateOptionsMenu(Menu menu) { 
 /* 一下代码为选项菜单测试
   // 添加菜单项
 // public abstract MenuItemadd(int groupId, int itemId, int order, CharSequence title)
 // 菜单所在的group,菜单的ID,排列顺序,显示的文字
 // add()方法返回一个MenuItem对象。而setIcon是MenuItem的方法
 menu.add(0, ITEM1, 0, "开始").setIcon(R.drawable.ic_launcher);
 menu.add(0, ITEM2, 0, "开始1");
 menu.add(1, ITEM3, 0, "开始2");
 menu.add(1, ITEM4, 0, "开始3");
 menu.add(1, ITEM5, 0, "开始4");
// menu.add(0, ITEM6, 0, "开始5");
// menu.add(0, ITEM7, 0, "开始6");
 */ 
 /**
  * 以下代码为添加子菜单的测试代码
  */ 
 // 添加子菜单 
 SubMenu subFile = menu.addSubMenu("文件"); 
 SubMenu editFile = menu.addSubMenu("编辑"); 
 // 为子菜单添加菜单项 
 subFile.add(0, ITEM1, 0, "新建"); 
 subFile.add(0, ITEM2, 0, "打开"); 
 return true; 
} 
@Override 
// 菜单被选中时触发的事件 
public boolean onOptionsItemSelected(MenuItem item) { 
 /*
 // 在此说明一下,Menu相当于一个容器,而MenuItem相当于容器中容纳的东西
 switch(item.getItemId()) {
 case ITEM1:
  // 设置Activity的Title
  setTitle("开始游戏1");
  break;
 case ITEM2:
  setTitle("开始游戏2");
  break;
 case ITEM3:
  setTitle("开始游戏3");
  break;
 case ITEM4:
  setTitle("开始游戏4");
  break;
 case ITEM5:
  setTitle("开始游戏5");
  break;
 case ITEM6:
  setTitle("开始游戏6");
  break;
 case ITEM7:
  setTitle("开始游戏7");
  break;
 }
 */ 
 /**
  * 子菜单项响应代码
  */ 
 switch(item.getItemId()) { 
 case ITEM1: 
  // 设置Activity的Title 
  setTitle("新建文件"); 
  break; 
 case ITEM2: 
  setTitle("打开文件"); 
  break; 
 } 
 return true; 
} 
@Override 
// 创建上下文菜单 
public void onCreateContextMenu(ContextMenu menu, View v, 
  ContextMenuInfo menuInfo) { 
 // 向上下文菜单中添加菜单项 
 // 注意此处的menu是ContextMenu 
 menu.add(0, ITEM1, 0, "红色背景"); 
 menu.add(0, ITEM2, 0, "绿色背景"); 
 menu.add(1, ITEM3, 0, "白色背景"); 
} 
@Override 
public boolean onContextItemSelected(MenuItem item) { 
 switch(item.getItemId()) { 
 case ITEM1: 
  myTV.setBackgroundColor(Color.RED); 
  break; 
 case ITEM2: 
  myTV.setBackgroundColor(Color.GREEN); 
  break; 
 case ITEM3: 
  myTV.setBackgroundColor(Color.WHITE); 
  break; 
 } 
 return true; 
}
}

希望本文所述对大家的Android程序设计有所帮助。


推荐阅读
  • CentOS 7.2 配置防火墙端口开放
    本文介绍如何在 CentOS 7.2 系统上配置防火墙以开放特定的服务端口,包括 FTP 服务的临时与永久开放方法,以及如何验证配置是否生效。 ... [详细]
  • 优化Input Checkbox与Label文本对齐的方法
    本文探讨了在网页设计中,如何有效解决input checkbox与label文字不对齐的问题。通过具体的代码实例和解决方案,帮助开发者实现更加美观的用户界面。 ... [详细]
  • 深入解析IGMP各版本特性及其演进
    本文详细探讨了Internet组管理协议(IGMP)的不同版本,包括IGMPv1的基础功能、IGMPv2的增强特性和IGMPv3的重要改进。特别分析了IGMPv3如何支持特定源组播(SSM)模型,并介绍了各版本之间的主要差异。 ... [详细]
  • YB02 防水车载GPS追踪器
    YB02防水车载GPS追踪器由Yuebiz科技有限公司设计生产,适用于车辆防盗、车队管理和实时追踪等多种场合。 ... [详细]
  • Java与JSON互转:实现JSON到Java对象及Java对象到JSON的转换
    本文详细介绍了如何在Java中实现JSON数据与Java对象之间的相互转换,包括代码示例和常见问题解决方法。 ... [详细]
  • Ubuntu GamePack:专为游戏爱好者打造的Linux发行版
    随着Linux系统在游戏领域的应用越来越广泛,许多Linux用户开始寻求在自己的系统上畅玩游戏的方法。UALinux,一家致力于推广GNU/Linux使用的乌克兰公司,推出了基于Ubuntu 16.04的Ubuntu GamePack,旨在为Linux用户提供一个游戏友好型的操作环境。 ... [详细]
  • MySQL锁机制详解
    本文深入探讨了MySQL中的锁机制,包括表级锁、行级锁以及元数据锁,通过实例详细解释了各种锁的工作原理及其应用场景。同时,文章还介绍了如何通过锁来优化数据库性能,避免常见的并发问题。 ... [详细]
  • 本文探讨了如何利用SqlDependency执行复杂的SQL查询,并确保在多线程环境下的安全性与效率。 ... [详细]
  • Python数据类型6 字典
    字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包 ... [详细]
  • 本文详细介绍了ActivityManagerService (AMS) 的工作原理及其在Android系统中的重要角色。AMS作为system_server进程的一部分,在系统启动时加载,负责管理和协调应用程序中的Activity和服务(Service)。文章将通过具体的接口图和通信流程,帮助读者更好地理解AMS的工作机制。 ... [详细]
  • EasyMock实战指南
    本文介绍了如何使用EasyMock进行单元测试,特别是当测试对象的合作者依赖于外部资源或尚未实现时。通过具体的示例,展示了EasyMock在模拟对象行为方面的强大功能。 ... [详细]
  • 题目 CF1245F: 清理春天的数学挑战 描述了一个数学问题:给定一个区间 [L, R](0 ≤ L, R ≤ 10^9),求该区间内满足 x + y = x ∧ y 的数对 (x, y) 的总数。 ... [详细]
  • 本文详细介绍了在使用Socket进行网络编程时,遇到链接器错误`undefined reference to WSAStartup@8`的解决方案,适用于多种开发环境。 ... [详细]
  • python开发mysql:单表查询&多表查询
    一单表查询,以下是表内容二多表查询,一下是表内容三总结&表创建过程单 ... [详细]
  • MacOS 重装指南
    本文详细介绍了如何通过U盘启动并重新安装MacOS,包括遇到安装问题时的解决方案。 ... [详细]
author-avatar
huateng
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有