实战android菜单项之XML加载菜单与动态菜单项[转]

原文地址:http://blog.csdn.net/kaiwii/article/details/7767225java

 

 

自定义android应用程序的菜单项首先要知道切入点。通过学习,知道主要是两个Activity类中的回调函数,分别是 onCreateOptionsMenu(Menu menu)和onPrepareOptionsMenu(Menu menu)。其中,onPrepareOptionsMenu(Menu menu)是每次激活菜单项目以前都会被调用的,而 onCreateOptionsMenu(Menu menu)仅在第一次激活菜单项目的时候才会被调用。而且,在这个第一次激活菜单项目的时候,也是首先调用 onCreateOptionsMenu(Menu menu),再调用onPrepareOptionsMenu(Menu menu)的。android

分析官方例子Notepad发现,由于onPrepareOptionsMenu(Menu menu)在每次激活菜单项目的时候都会被调用的,因此能够在这个回调方法里面,根据实时状况改变菜单项目的内容,而咱们下面提到的动态菜单项也是在这个onPrepareOptionsMenu(Menu menu)方法中切入的。app

而同时,咱们能够在 onCreateOptionsMenu(Menu menu)方法中,完成大体的菜单项渲染工做。而至于菜单项的渲染工做,本人推荐使用XML加载菜单的方式完成。eclipse

下面先就如何使用XML加载菜单展开说明。函数

第一步,在项目的res/menu下新建而且编写定义menu的xml文件。下面就Notepad里面的list_options_menu.xml做简要说明。学习

res/menu/list_options_menu.xml:this

 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 menu
11           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代码实现的。spa

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

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

1 // Inflate menu from XML resource
2         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

相关文章
相关标签/搜索