實戰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

相關文章
相關標籤/搜索