2011-11-01

用程式寫 Android Menu

Android menu 的 class 叫做 android.view.Menu,每個 activity 都內建一個 Menu 物件,可以加入多個 menu item(android.view.MenuItem) 或者 submenu(android.view.SubMenu,繼承自 android.view.Menu)。

因為每個 activity 都內建一個 Menu 物件,所以要使用 menu 就不用新建 menu 物件,只要實做 Activity 裡的 onCreateOptionsMenu(Menu menu) 與 onOptionsItemSelected(MenuItem item) 就可以了。

MenuActivity
public class MenuActivity extends Activity {

 private static final int MENU_ITEM_1 = 10;
 private static final int MENU_ITEM_2 = 20;
 private static final int MENU_ITEM_3 = 30;
 private int total;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // 要呼叫這個才會加上 system menu,但是目前 Android 沒有提供任何 system menu item
  // 所以呼叫了也看不出差異
  super.onCreateOptionsMenu(menu);
  // 加入3個 menu item
  // 16 為 group id,目前沒用到
  // MENU_ITEM_1,2,3 為 item id,onOptionsItemSelected(...)會用到
  // 1,3,2 為 order,代表 menu item 顯示的順序,不是看 menu.add(...) 的順序
  menu.add(16, MENU_ITEM_1, 1, "壹");
  menu.add(16, MENU_ITEM_3, 3, "參");
  menu.add(16, MENU_ITEM_2, 2, "貳");
  return true;
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  TextView tv = (TextView) this.findViewById(R.id.tv);
  switch (item.getItemId()) {
  case MENU_ITEM_1:
  case MENU_ITEM_3:
   this.total += item.getItemId();
   break;
  case MENU_ITEM_2:
   this.total -= item.getItemId();
   break;
  default:
   // 交給別人來處理,有可能是 system menu
   return super.onOptionsItemSelected(item);
  }
  tv.setText(tv.getText() + "\n" + item.getTitle() + " -> " + this.total);
  // 回傳 true 表示已經處理完畢,不用再往外丟了
  return true;
 }
}
結果如下,注意 menu item 的順序:

沒有留言:

張貼留言