2010年7月1日 星期四

Android程式設計 (十四) 功能表設計

功能表是GUI中基本的操作介面,考量螢幕尺寸及作業便利性,Android應用程式功能表是以浮動方式處理,當按下「Menu」鍵時才開啟應用程式的功能表。
產生功能表作業之程式框架
由Source功能表點選「Override/Implement Methods...」功能表項目開啟「Override/Implement Methods」對話視窗,然後由「Select methods to override or implements:」清單中勾選onCreateOptionsMenu(Menu)onOptionsItemSelected(MenuItem)項目,ADT就會產生應用程式功能表作業所需的程式框架。
建立功能表項目
首先必須在onCreateOptionsMenu()方法中建立功能表項目,我們可使用add()方法加入功能表項目。另外,可使用setIcon()方法為功能表項目設定圖示。
以下程式碼會將「關於…」及「結束…」二個功能表項目加入到應用程式功能表中。
final int MENU_ABOUT = 0;
final int MENU_QUIT = 1;@Override
public boolean onCreateOptionsMenu (Menu menu) {
    // TODO Auto-generated method stub
    final int ICON_ABOUT = android.R.drawable.ic_menu_help;
    final int ICON_QUIT = android.R.drawable.ic_menu_close_clear_cancel;
    menu.add (0, MENU_ABOUT, 0, "關於");
    menu.add (0, MENU_QUIT, 0, "結束");
    menu.getItem (MENU_ABOUT).setIcon (ICON_ABOUT);
    menu.getItem (MENU_QUIT).setIcon (ICON_QUIT);
    return super.onCreateOptionsMenu (menu);
}
撰寫功能表項目之作業程式碼
由於所有功能表項目是共用一個處理程序,程式中可透過getItemId()方法來區辨目前是那一個功能表項目被觸動,並針對每一個功能表項目分別撰寫作業程式碼。
例如當使用者按下「關於…」,程式要顯示「關於」對話盒,這部份可套用先前介紹的AlertDialog物件;而當使用者按下「結束…」,則直接呼叫Android內建的finish()函式關閉目前的activity。
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId()){
        case MENU_ABOUT:
            openAboutDialog();
            break;
        case MENU_QUIT:
            finish();
            break;
    }
    return super.onOptionsItemSelected(item);
}
private void openAboutDialog() {
    AlertDialog dialog = new AlertDialog.Builder(MainActivity.this).create();
    dialog.setTitle("關於遊戲科學");
    dialog.setMessage("南開科技大學電子工程系電腦遊戲設計組");
    dialog.setButton("Yes", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
        }
    });
    dialog.show();
}