My Calendar

2014年7月26日 星期六

Android-建立選單(Menu)

Android-建立選單(Menu)

建立選單有兩種方法:
  1. 透過XML定義選單
  2. 透過程式碼定義選單

不管是第一種或第二種方法都要用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應用程式上要用到onCreateOptionMenugetMenuInfalter.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_aboutR.id.action_close是XML檔中定義的識別符號。 

沒有留言:

張貼留言