实战android菜单项之XML加载菜单与动态菜单项[转]
原文地址:http://blog.csdn.net/kaiwii/article/details/7767225
自定义android应用程序的菜单项首先要知道切入点。经过学习,知道主要是两个Activity类中的回调函数,分别是 onCreateOptionsMenu(Menu menu)和onPrepareOptionsMenu(Menu menu)。其中,onPrepareOptionsMenu(Menu menu)是每次激活菜单项目之前都会被调用的,而 onCreateOptionsMenu(Menu menu)仅在第一次激活菜单项目的时候才会被调用。并且,在这个第一次激活菜单项目的时候,也是首先调用 onCreateOptionsMenu(Menu menu),再调用onPrepareOptionsMenu(Menu menu)的。
分析官方例子Notepad发现,因为onPrepareOptionsMenu(Menu menu)在每次激活菜单项目的时候都会被调用的,所以可以在这个回调方法里面,根据实时情况改变菜单项目的内容,而我们下面提到的动态菜单项也是在这个onPrepareOptionsMenu(Menu menu)方法中切入的。
而同时,我们可以在 onCreateOptionsMenu(Menu menu)方法中,完成大致的菜单项渲染工作。而至于菜单项的渲染工作,本人推荐使用XML加载菜单的方式完成。
下面先就如何使用XML加载菜单展开说明。
第一步,在项目的res/menu下新建并且编写定义menu的xml文件。下面就Notepad里面的list_options_menu.xml作简要说明。
res/menu/list_options_menu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!-- This is our one standard application action (creating a new note). -->
<item android:id="@+id/menu_add"
android:icon="@drawable/ic_menu_compose"
android:title="@string/menu_add"
android:alphabeticShortcut='a'
android:showAsAction="always" />
<!-- the appearance logic is defined in the onPrepareOptionsMenu(Menu menu) -->
<!-- If there is currently data in the clipboard, this adds a PASTE menu item to the menu
so that the user can paste in the data.. -->
<item android:id="@+id/menu_paste"
android:icon="@drawable/ic_menu_compose"
android:title="@string/menu_paste"
android:alphabeticShortcut='p' />
</menu>
上面的代码主要定义了两个菜单项目“menu_add”和“menu_paste”,而至于注释中提及的逻辑需要在这个xml之外,通过Java代码实现的。
第二步,在onCreateOptionsMenu(Menu menu)回调方法中,通过MenuInflater实例来加载list_options_menu.xml并且完成渲染。
src/NotesList.java的onCreateOptionsMenu(Menu menu)方法:
// Inflate menu from XML resource
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.list_options_menu, menu);
上面的代码比较直观,其中需要说明的android系统,严格来说,应该eclipse的ADT插件会为每个在res文件夹下的文件生成一个ID(raw子目录除外)。之后,我们就可以通过这个ID引用这个文件(也可以说是资源吧!)
后面还有,原文地址:http://blog.csdn.net/kaiwii/article/details/7767225
实战android菜单项之XML加载菜单与动态菜单项[转]的更多相关文章
- Xamarin Android Fragment的两种加载方式
android Fragment的重点: 3.0版本后引入,即minSdk要大于11 Fragment需要嵌套在Activity中使用,当然也可以嵌套到另外一个Fragment中,但这个被嵌套的Fra ...
- Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果)
Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果) 首句依然是那句老话,你懂得! finddreams :(http://blog.csdn.net/finddr ...
- Android三种基本的加载网络图片方式(转)
Android三种基本的加载网络图片方式,包括普通加载网络方式.用ImageLoader加载图片.用Volley加载图片. 1. [代码]普通加载网络方式 ? 1 2 3 4 5 6 7 8 9 10 ...
- Android ViewPager Fragment使用懒加载提升性能
Android ViewPager Fragment使用懒加载提升性能 Fragment在如今的Android开发中越来越普遍,但是当ViewPager结合Fragment时候,由于Androi ...
- Android Phonebook编写联系人UI加载及联系人保存流程(一)
2014-01-06 17:05:11 将百度空间里的东西移过来. 本文适合ROM定制做Phonebook的童鞋看,其他人飘过即可- Phonebook添加/编辑联系人UI加载及保存联系人流程,是一系 ...
- JAVA Web.xml 加载顺序
web.xml加载过程(步骤): 1.启动WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> ...
- Java web.xml加载顺序
web.xml加载过程(步骤): 1.启动WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener&g ...
- Android开发中如何解决加载大图片时内存溢出的问题
Android开发中如何解决加载大图片时内存溢出的问题 在Android开发过程中,我们经常会遇到加载的图片过大导致内存溢出的问题,其实类似这样的问题已经屡见不鲜了,下面将一些好的解决方案分享给 ...
- Android引入高速缓存的异步加载全分辨率
Android引进高速缓存的异步加载全分辨率 为什么要缓存 通过图像缩放,我们这样做是对的异步加载优化的大图,但现在的App这不仅是一款高清大图.图.动不动就是图文混排.以图代文,假设这些图片都载入到 ...
随机推荐
- JavaScript 2016年的概况
国外的网站stateofjs.com根据超过九千位开发人员的问卷调查,发布了2016年JavaScript的年度概况报名. 注:本文翻译的部分可能存在不准确的情况,请以原文为准. 调查结果的报告目录结 ...
- AD8275 Driver Amplifiers For Analog-To-Digital Converters
Driver Amplifiers For Analog-To-Digital Converters What amplifiers are used to drive analog-to-digit ...
- Notes for Linux Administration Handbook (1) : Booting and Shutting Down
- CentOS6.5下安装Open vSwitch
准备 # yum install openssl-devel redhat-rpm-config kernel-devel -y #yum install kvm libvirt python-vir ...
- 利用EEPROM实现arduino的断电存储
转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 一.EEPROM简介 EEPROM (Electrically Erasable Progr ...
- Imagick总结及反思
2014-08-23 今天安装Imagick出现了很多问题,自己也有些着急,以下为各版本信息: ImageMagick: 安装版本:ImageMagick-6.5.8-Q16 安装目录:E:/PHPS ...
- jQuery之Deferred对象详解
deferred对象是jQuery对Promises接口的实现.它是非同步操作的通用接口,可以被看作是一个等待完成的任务,开发者通过一些通过的接口对其进行设置.事实上,它扮演代理人(proxy)的角色 ...
- 浏览器 CSS Hack 收集
所谓的Hack就是只有特定浏览器才能识别这段hack代码.Hack 不是什么好东西,除非没有办法,我们尽量还是不要用着玩意. 下面是各个浏览器的CSS Hack 列表. Firefox 浏览器 @-m ...
- [纯干货] MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- 通过Web.config实现301重定向
通过Web.config实现301重定向 IIS7以上可以通过修改Web.config实现IIS设置 现在我们通过Web.config实现301重定向 <system.webServer> ...