2011年8月28日 星期日 | By: 雞米

[Android] 在Activity中加入選單(Menu)


Menu是Android Application特有的功能,當User按下Menu Button後,它會出現在程式的正下方,以提供其它額外系統動作。


程式碼說明:

1. 建立Menu XML描述檔案

在Resource資料夾中新增Menu資料夾,並加入XML描述檔,它包含了以下元素:

(1) menu:定義一個Menu物件,為xml的root node
(2) item:代表Menu中的選項,可以藉由設定其icon、title屬性改變選項外觀

雖然Menu可透過程式動態產生,但建議還是以外部xml檔案定義的方式建立,這對於程式維護以及了解選單結構比較有益。

<?xml version="1.0" encoding="UTF-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
>" 
  <item
     android:id="@+id/add"
     android:icon="@drawable/add"
     android:title="新增"
  />
  <item
     android:id="@+id/buy"
     android:icon="@drawable/buy"
     android:title="購買"
  />
</menu>

2. 覆寫onCreateOptionsMenu建立Menu Object

onCreateOptionsMenu(Menu menu)會在Activity第一次建立Menu(使用者按下Menu鈕)時被呼叫,因此必須透過MenuInflater將xml檔案實體化Menu物件。

/**將xml透過MenuInflater轉換為Menu object instance*/
  @Override
  public boolean onCreateOptionsMenu(Menu menu){
      MenuInflater inflater = getMenuInflater();
      inflater.inflate(R.menu.option_menu, menu);
      return true;
  }

3. 覆寫onOptionsItemSelected定義Menu選項對應的動作

當User選擇Menu的任一選項時,會呼叫Activity的onOptionsItemSelected()並傳入被選擇的MenuItem,可以簡單透過switch case以item id作相對應動作的對應,在本例將以Toast message顯示所選擇的option。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
 // 針對 item selection id 進行動作處理
 switch (item.getItemId()) {
 case R.id.add:
  Toast.makeText(this, "Add action", Toast.LENGTH_SHORT).show();
  return true;
 case R.id.buy:
  Toast.makeText(this, "Buy action", Toast.LENGTH_SHORT).show();
  return true;
 default:
  return super.onOptionsItemSelected(item);
 }
}


0 意見:

張貼留言