原文地址: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:

 1 <?xml version="1.0" encoding="utf-8"?> 2 <menu xmlns:android="http://schemas.android.com/apk/res/android"> 3     <!--  This is our one standard application action (creating a new note). --> 4     <item android:id="@+id/menu_add" 5           android:icon="@drawable/ic_menu_compose" 6           android:title="@string/menu_add" 7           android:alphabeticShortcut='a' 8           android:showAsAction="always" /> 9    <!-- the appearance logic is defined in the onPrepareOptionsMenu(Menu menu)  -->10     <!--  If there is currently data in the clipboard, this adds a PASTE menu item to the menu11           so that the user can paste in the data.. -->12     <item android:id="@+id/menu_paste"13           android:icon="@drawable/ic_menu_compose"14           android:title="@string/menu_paste"15           android:alphabeticShortcut='p' />16 </menu>

上面的代码主要定义了两个菜单项目“menu_add”和“menu_paste”,而至于注释中提及的逻辑需要在这个xml之外,通过Java代码实现的。

第二步,在onCreateOptionsMenu(Menu menu)回调方法中,通过MenuInflater实例来加载list_options_menu.xml并且完成渲染。

src/NotesList.java的onCreateOptionsMenu(Menu menu)方法:

1 // Inflate menu from XML resource2         MenuInflater inflater = getMenuInflater();3         inflater.inflate(R.menu.list_options_menu, menu);

上面的代码比较直观,其中需要说明的android系统,严格来说,应该eclipse的ADT插件会为每个在res文件夹下的文件生成一个ID(raw子目录除外)。之后,我们就可以通过这个ID引用这个文件(也可以说是资源吧!)

后面还有,原文地址:http://blog.csdn.net/kaiwii/article/details/7767225

更多相关文章

  1. Android 和 JS 交互时调用不成功解决方法
  2. android应用程序最小化的处理方法
  3. Android新线程中更新主线程UI中的View方法汇总
  4. 彻底解决Android 应用方法数不能超过65536的问题
  5. android install faild insufficient storage错误的解决方法
  6. 转:Android实现矩形设置菜单
  7. [Android]ListView & ViewPager & GridView 常见问题解决方法
  8. Android中数据存储的几种方法
  9. Android 通过AlertDialog创建伪菜单

随机推荐

  1. Android之计时器(Chronometer)的用法
  2. cocos2d-x tutorials: Start with Androi
  3. Android项目开发中如何处理Home键
  4. 2010.12.27——— android service
  5. Android为按钮添加相应事件的代码
  6. Android项目研发之多分辨率适配
  7. listView中item 图文并存的两种方法
  8. 从零开始--系统深入学习android(实践-让我
  9. Android 软键盘遮挡三种解决方案
  10. 替换Android控件默认样式 (例子:自定义进度