Android-建立選單(Menu)
建立選單有兩種方法:
- 透過XML定義選單
- 透過程式碼定義選單
不管是第一種或第二種方法都要用onCreateOptionMenu建立選單。
透過XML定義選單
選單的xml描述檔在 res -> menu 當中,本篇的選單xml檔案名稱為main.xml(任何名稱都可以)在xml檔案裡定義我們想要的選單內容。以下是一個範例。
main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="com.example.bmi.MainActivity" > <item android:id="@+id/action_settings" android:orderInCategory="100" android:title="@string/action_settings" android:showAsAction="never"/> </menu>在menu標籤在加入item標籤,就可以定義每個選項與顯示的內容。
- android:id = 指定選單項目的識別代號
- android:title = 指定選項的名字。
- android:orderInCategory = 指定選單間的排列順序,數字小的優先。若沒有指定這個屬性,則按照你定義item標籤的順序顯示。
- android:showAsAction = 定義選單項目在ActionBar上的顯示方式。詳細資訊到Menu Resources看看。
將選單定義完成過後,要將定義好的選單加到Android應用程式上要用到onCreateOptionMenu和getMenuInfalter.inflate().
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; }
除了可以透過XML定義選單,也可以透過程式碼來定義選單。新增一個選項要用到menu.add()
menu.add(groupId, itemId, order, title)
- groupId = 指定選項屬於哪一個組別
- itemId = 指定每一個選項一個唯一值,如果沒有指定就用Menu.NONE
- order = 排列順序
- title = 顯示選項的名字
@Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0,Menu.FIRST,100,R.string.about) return true; }
處理選單項目的功能
當選單設定好過後,這時候要處理每個選單項目的功能就需要加入onOptionsItemSelected函式。
@Override public boolean onOptionsItemSelected(MenuItem item){ // TODO Auto-generated method stub switch(item.getItemId()) { case R.id.action_about: openOptionsDialog(); break; case R.id.action_close: finish(); break; } return super.onOptionsItemSelected(item); }
onOptionsItemSelected這個函式可以處理所有選項項目。函式中傳入一個MenuItem型別的item參數程式中的super.onOptionsItesSelected(item)表示要先執行已定義在Activity類別中原本的onOptionsItemSelected函式內容,後面才執行我們為此函式新定義的動作。
接著要在程式中對每個選項作處理 :
switch(item.getItemId()) { case R.id.action_about: openOptionsDialog(); break; case R.id.action_close: finish(); break; }
我們可以使用item.getItemId()函式,來取得在熒幕上選取的選單項目所對應的識別符號。然後在『switch』中,根據從item.getItemId()所取得的識別符號判斷程式應該運行的流程。R.id.action_about和R.id.action_close是XML檔中定義的識別符號。