Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 526|回复: 0

开发交流:Android开发(用户界面-创建菜单)

[复制链接]

该用户从未签到

发表于 2011-10-24 09:59:35 | 显示全部楼层 |阅读模式
创建菜单 Creating Menus
       菜单是任何应用程序的一个重要部分,提供了透露应用程序功能和设置的通用接口。Android为开发者提供了一个简单的编程接口来实现各种条件下的标准化应用程序菜单。
Android提供了三种基础菜单类型:

      选项菜单Options Menu
      这是一个活动的主菜单。通过按下设备菜单键来显示它。选项菜单包含两组菜单项:

       图标菜单Icon Menu
       这个是当用户按下菜单键时最初出现屏幕下方的item集合。它支持最多6个菜单项。只有这些菜单支持图标而且这些菜单并不支持checkboxes或者radio buttons。

       扩展菜单Expanded Menu
       这是通过按“更多”菜单显现出来的一个竖向的项目列表。它仅当图标菜单过多时存在而且是由6个以及其它选项菜单组成。

       上下文菜单Context Menu
       这是一个浮动菜单列表,通常在你长时间按在一个视图上时出现(比如一个列表项)

       子菜单Submenu
       这是一个浮动菜单列表,通过在选项菜单或上下文菜单选择菜单项显露出来。不支持嵌套子菜单。


        这个选项菜单通过按设备菜单键打开。打开后,出现图标菜单,可包含6个菜单项。如果添加多于6个菜单项,多出的部分将通过“更多”菜单项在扩展菜单中显示。扩展菜单项在多于6个菜单项时自动添加。
选项菜单应该包含应用程序的基本功能以及任何必要的浏览项(例如,返回桌面或应用程序设置)。你还可以通过增加子菜单Submenus来组织主题和包含额外的菜单功能。
       当菜单第一次被打开时,系统会调用活动onCreateOptionsMenu()回调函数。重写该方法并生成传递给你的这个菜单对象。你可以通过扩充定义在XML文件中的一个菜单资源或者通过为你想要的每一个菜单项调用add()方法生成这个菜单。这个方法增加一个菜单项MenuItem,并返回新创建的对象。你可以用返回的MenuItem来设置附加属性如图标,快捷键,意图以及这个菜单项的其它设置。
       有多个add()方法。通常,你会使用接受一个itemId参数的那个。这是一个唯一的整数,允许你在回调函数中识别这个item。
       当一个菜单项从选项菜单中被选择时,你会接收到一个onOptionsItemSelected()回调。这个回调传给你选中的MenuItem。你可以通过请求itemId:getItemId()来识别它,这将返回add()方法分配的整数。一旦你识别了这个菜单项,就可以采取合适的动作。

       下面是一个活动里的例子,其中我们创建了一个选项菜单并处理菜单项的选择:

java代码: /* Creates the menu items */

public boolean onCreateOptionsMenu(Menu menu) {

menu.add(0, MENU_NEW_GAME, 0, “New Game”);

menu.add(0, MENU_QUIT, 0, “Quit”);

return true;}



/* Handles item selections */

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case MENU_NEW_GAME: newGame();

return true; case MENU_QUIT: quit();

return true;

}

return false;

}
复制代码这个add()方法有四个参数:groupId, itemId, order, 和 title。groupId 允许你关联这个菜单到一个菜单组中(更多参见下面的菜单组Menu groups)-这个例中,我们忽略掉它。itemId是用来识别菜单项的唯一的整数,在回调函数中使用。order 允许我们定义菜单的显示顺序-缺省情况下,它们以添加时的顺序排列。title当然是菜单的名字(可以是一个字符串资源,为了本地化更加方便,建议你使用资源)。
提示: 如果你有一些可以以一个标题归类的菜单项,考虑以子菜单Submenu的方式组织它们。
       增加图标Adding icons
       图标也可以通过setIcon()函数被添加到菜单项中。
Java代码:

menu.add(0, MENU_QUIT, 0, “Quit”) .setIcon(R.drawable.menu_quit_icon);
复制代码
  修改菜单Modifying the menu
       如果有些时候你想在选项菜单被打开的时候re-write它,可以override onPrepareOptionsMenu()方法,该方法在每一次菜单被打开的时候调用。它将传递给你菜单对象,就像回调一样。这对于根据应用程序状态调整菜单选项很有用。
       注意: 当改变菜单项时,根据当前选择的item来这样做是一个不好的行为。记住,在触摸模式中,将不会有一个选择或聚焦的item。相反,当你想基于UI中的某个特定item来提供功能时,你应该使用一个Context Menu 来完成这种行为。
       编辑本段 回目录上下文菜单Context Menu
       Android的上下文菜单在概念上和PC软件的右键菜单类似。当一个视图注册到一个上下文菜单时,执行一个在该对象上的“长按”(按住不动差不多两秒钟)动作,将出现一个提供相关功能的浮动菜单。上下文菜单可以被注册到任何视图对象中,不过,最常见的是用于列表视图ListView的item,在按中列表项时,会转换其背景色而提示将呈现上下文菜单。 (电话联系人列表提供了关于这个特性的一个很好的例子)。
注意:上下文菜单项不支持图标或快捷键。

       为了创建一个上下文菜单,你必须重写这个活动的上下文菜单回调函数:onCreateContextMenu() 和onContextItemSelected()。在回调函数onCreateContextMenu()里,你可以通过使用一个add()方法来添加菜单项,或者通过扩充一个定义在XML中的菜单资源。然后,通过registerForContextMenu()为这个视图注册一个上下文菜单ContextMenu.

       比如,下面的代码可以被用到Notepad应用程序中来为列表中的每一个注释添加一个上下文菜单:

Java代码:

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo);

menu.add(0, EDIT_ID, 0, “Edit”);

menu.add(0, DELETE_ID, 0, “Delete”);

}



public boolean onContextItemSelected(MenuItem item) {

AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

switch (item.getItemId()) {

case EDIT_ID: editNote(info.id);

return true; case DELETE_ID: deleteNote(info.id);

return true; default:

return super.onContextItemSelected(item);

}



}
复制代码
回复

使用道具 举报

该用户从未签到

发表于 2011-10-24 09:59:41 | 显示全部楼层

Re:开发交

贴些图可以更直观
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 09:59:43 | 显示全部楼层

Re:开发交

学习了学习了
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 09:59:46 | 显示全部楼层

Re:开发交

其实想看一下最原始的示例教程
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 09:59:49 | 显示全部楼层

Re:开发交

qinai 的帖子

学习下,还不是很熟悉。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 09:59:52 | 显示全部楼层

Re:开发交

很好,很强大!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 09:59:54 | 显示全部楼层

Re:开发交

qinai 的帖子

第一遍没看太懂。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 09:59:57 | 显示全部楼层

Re:开发交

受教 了。 。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 01:48 , Processed in 0.377254 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表