下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、最新历史版本:android开发指南用户界面创建菜单创建菜单 creating menus菜单是任何应用程序的一个重要部分,提供了透露应用程序功能和设置的通用接口 o android 为开发者提供了一个简单的编程接口来实现各种条件下的标准化应用程序菜单。android提供了三种基础菜单类型:选项菜单options menu这是一个活动的主菜单。通过按下设备菜单键来显示它。选项菜单包含两组菜单项:图标菜单icon menu这个是当用户按下菜单键时最初出现屏幕下方的item集合。它支持最多6个菜单项。只有 这些菜单支持图标而且这些菜单并不支持checkboxes或者radio buttons。扩展
2、菜单expanded menu这是通过按“更多”菜单显现出来的一个竖向的项冃列表。它仅当图标菜单过多时存在而几是 由6个以及其它选项菜单组成。上下文菜单context menu这是一个浮动菜单列表,通常在你长时间按在一个视图上吋出现(比如一个列表项)子菜单submenu这是一个浮动菜单列表,通过在选项菜单或上下文菜单选择菜单项显露出来。不支持嵌套子 菜单。回h录选项菜单options menu这个选项菜单通过按设备菜单键打开。打开后,出现图标菜单,可包含6个菜单项。如果添 加多于6个菜单项,多出的部分将通过“更多”菜单项在扩展菜单中显示。扩展菜单项在多于 6个菜单项时自动添加。选项菜单应该包含
3、应用程序的革本功能以及任何必要的浏览项(例如,返冋桌面或应用程序 设置)。你还可以通过增加子菜单submenus來组织主题和包含额外的菜单功能。当菜单第一次被打开时,系统会调用活动oncreateoptionsmenu()冋调函数。重写该方法并 生成传递给你的这个菜单对象。你可以通过扩充定义在xml文件中的一个菜单资源或者通 过为你想要的每一个菜单项调用add()方法生成这个菜单。这个方法增加一个菜单项 menuitem,并返回新创建的対象。你可以用返回的menultem來设置附加属性如图标,快 捷键,意图以及这个菜单项的其它设置。有多个add()方法。通常,你会使用接受一个itemld参数的
4、那个。这是一个唯一的整数,允 许你在回调函数屮识别这个iterrio当个菜单项从选项菜单中被选择吋,你会接收到个onoptionsltemselected()冋调。这 个回调传给你选中的menuitem。你可以通过请求itemld: getltemld()來识别它,这将返回 add()方法分配的整数。一旦你识别了这个菜单项,就可以采取合适的动作。卜面是一个活动里的例子,其中我们创建了一个选项菜单并处理菜单项的选择:复制到剪贴板java代码1. /* creates the menu items */public boolean oncreateoptionsmenu(men u menu) m
5、enu.add(0, menu_new_game, 0, "new game"); menu .add (0, menu_quit, 0, "quit"); return true; /* handles item selections */p ublic boolean onoptionsitem selected (me nu item item) sw itch (item.ge tltemld() case menu_new_game:newgame(); return true; case menu_quit:quit(); return tr
6、ue; return false;|2.这个add()方法有四个参数:groupld, itemld, order,和title。groupld允许你关联这个菜 单到一个菜单组中(更多参见下面的菜单纽menu groups)-这个例中,我们忽略掉它o itemld 是用来识别菜单项的唯一的整数,在回调函数中使用。order允许我们定义菜单的显示顺序 缺省情况下,它们以添加吋的顺序排列。title当然是菜单的名字(可以是一个字符串资源, 为了本地化更加方便,建议你使用资源)。提示:如果你有-些可以以一个标题归类的菜单项,考虑以子菜单submenu的方式组织它 们。增加图标adding icons
7、图标也可以通过set i con ()函数被添加到菜单项中。复制到剪贴板java代码1. menu.add(0, menu_quit, 0, "quit") .set i con (r. drawable. menu_quit_ico n);修改菜单 modifying the menu如果有些时候你想在选项菜单被打开的时候re-write它,可以override onprepareoptionsmenu()方法,该方法在每一次菜单被打开的吋候调用。它将传递给你菜单 对象,就像回调一样。这对于根据应用程序状态调整菜单选项很有用。注意:当改变菜单项时,根据当前选择的item來
8、这样做是一个不好的行为。记住,在触摸 模式中,将不会有一个选择或聚焦的item。相反,当你想基于ui中的某个特定item来提 供功能时,你应该使用一个context menu来完成这种行为。冋h录上下文菜单context menuandroid的上下文菜单在概念上和pc软件的右键菜单类似。当一个视图注册到一个上下文 菜单时,执行一个在该对象上的“长按”(按住不动差不多两秒钟)动作,将出现一个提供相 关功能的浮动菜单。上下文菜单可以被注册到任何视图对象中,不过,最常见的是用于列表 视图list view的item,在按中列表项吋,会转换其背景色而提示将呈现上下文菜单。(电 话联系人列表提供了关于
9、这个特性的一个很好的例子)。注意:上下文菜单项不支持图标或快捷键。为了创建一个上下文菜单,你必须重写这个活动的上下文菜单回调函数: oncreatecontextmenu()和 oncontextltemselected()o在回调函数 oncreatecontextmenu() 里,你町以通过使用一个add()方法来添加菜单项,或者通过扩充一个定义在xml中的菜单 资源。然示,通过registerforcontextmenu()为这个视图注別一个上下文菜单context menu.比如,下而的代码可以被用到notepad应用程序中來为列表中的每一个注释添加一个上下 文菜单:复制到剪贴板jav
10、a代码1. public void oncreatecontextmenu(contextmenu menu, view v,contextmenulnto menuinfo) super.oncreatecontextmenu(menu, v, menuinfo); menu.add(0, edit_id, 0, "edit"); menu.a dd(0, delete_id, 0, "delete"); public boolean oncontext item select ed(m enultem item) adapt er cont ext
11、menu info info = (adaptercontext menu inf o) item.getmenulnfo(); sw itch (item.getltemld() case edit_id: edit note(info.id); return true; case delete_id: deletenote(info.id); ret urn true; default: return super.oncontextltemselected(item); 在 oncreatecontextmenu()中,除了给hl将添加 menuitems 的 contextmenu 外,
12、述需要给 定选中的视图和一个上下文菜单信息contextmenulnto对象,该对象提供了选中对象的附 加信息。在本例小,oncreatecontextmenu()没做什么特别的事只是添加了一些菜单项。在 oncontextltemselected() i川调函数屮,我们从menultem 屮请求 adaptercontextmenuinfo, 该对彖提供当前选中项的信息。我们从中所要的只是这个选中项的列表id,所以无论编辑 还是删除一个注释,我们通过这个对彖的adaptercontext menu info, info字段来找到该id。 这个id被传递给editnote()和deleteno
13、te()方法来执行相应的动作。现在,耍为一个列表视图中的所有项注册上下文菜单,我们可以传递整个的列表视图对象给 registerforcontextmenu(view)方法:复制到明贴板java代码1. registerforcontextmenu(getlistview();记住,你可以传递任何视图对象来注册一个上下文菜单。这里,getlistview()返回这个被用 于notepad应用程序的列表活动list activity屮的列表视图对象。这样,这个列表屮的任何 item都被注册到这个上下文菜单。冋h录子菜单submenus一个子菜单可以被添加进任何菜单中,但不能加入另外的子菜单屮。当
14、你的应用程序有很多 功能可以按主题组织的时候,这将非常有用,就好比pc应用程序的菜单栏(文件,编辑, 视图,等)。子菜单通过addsubmenu()加入到己有的菜单屮而创建。该函数会返冋一个子菜单submenu 对象(菜单menu的一个扩展)。然后你可以通过调用add()方法给这个菜单添加其他项, 例如:复制到剪贴板java代码1. public boolean oncreateoptionsmenu(menu menu) boolean result = su per.oncreateoptionsmenu(menu); submenu filemenu = menu.addsubmenu
15、("file"); submenu editmenu = menu.addsubmenu("edit*1); filemenu.add(mne wh); filemenu.add(nopen”); filemenu.add(hsaveh); editmenu.add(mundo");editmenu.addc'redo"); return result;2.了菜单中选择项的回调动作将由父菜单的回调方法处理。比如上面的例了,了菜单中的选择 将由 onoptionsltemselected()回调处理。你也可以在xml中定义父菜单时增加子菜
16、单。回h录在xml里定义菜单define menus in xml就像android用户界面布局一样,你可以在xml文件中定义菜单,然后在你菜单的 oncreate.()回调函数中扩充它们。这使得你的应用程序代码简洁而且把更多的界血设计分 离到xml文件中,这更容易形象化。首先,在你的丄程res/的冃录下创建一个新的冃录叫menuo你所有定义应用程序菜单的xml 文件都应该放在这里。在一个菜单xml布局中,有三个合法的元素:<menu>, vgroup和vitem。item和group 必须是菜单的子元素,而item元素还可以是group的子元素,并且另外一个菜单元素可以 是一个i
17、tem的子元素(来创建一个子菜单)。当然,任何文件的根元索必须是一个menu 元素。作为一个例子,我们将定义和在上而的选项菜单options menu章节中所创建的相同的菜单, 我们首先在目录res/menu/里创建一个名为options_menu.xml的文件。复制到明贴板java代码1. < menu xmlns:android= " < item android:id= "4-id/new_game"android:title= "new game" /><item android:id= "4-id/q
18、uit"android:title二"quit" /></menu>然后,在oncreateoptionsmenu()方法里,我们通过menulnflater.inflate。方法扩充这个资 源:复制到剪贴板java代码1. public boolean oncreateoptionsmenu(menu menu) menulnflater inflate r = getmenulnflater(); inflater.inflate(r.menu.options_menu, menu); re turn true;getmenulnflater()方法返冋我们活动上下文的menulnflatero然示我们调
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025~2026学年河南省鹤壁市高一上学期1月期末考试生物试卷
- 2025~2026学年山东枣庄市高一下学期期末考试生物试卷
- 2026 湖南 市场监管岗事业单位结构化面试
- 2026 江苏 市场监管岗事业编结构化面试高频强化训练卷含答案解析
- 2026年山东省职业院校技能大赛-高职组(市政管线(道)数字化施工赛项)考试题库(带答案)
- 2026 山东 综合管理岗事业单位高频强化训练卷含答案解析
- (2026版)小学食堂采购制度小学食堂采购制度范文
- Unit3-Unit4阶段学情分层练 (含答案)人教 PEP 版(三起)五年级上册
- (2026年)医院医疗设备管理制度
- 2026年ICU 去甲肾上腺素监护护理试卷及答案
- 成人阻塞性睡眠呼吸暂停诊断和外科治疗指南
- GB/T 755-2025旋转电机定额与性能
- 建筑工程技术生涯发展展示
- 如何上好一节公开课培训
- 降压药课件讲课件
- GB/T 45683-2025产品几何技术规范(GPS)几何公差一般几何规范和一般尺寸规范
- CJ/T 190-2015铝塑复合管用卡压式管件
- 2025年工程项目管理项目生命周期试题及答案
- 销售沙石知识培训课件
- 2025年度婚内出轨离婚协议书附带配偶精神损害赔偿协议
- 房屋渗漏修补合同样式
评论
0/150
提交评论