選單元件提供使用者在應用程式方便選擇項目,屬於常用的元件之一,Options Menu就是透過按手機的menu鑑顯示的功能表,最多可以顯示六項,稱為Icon Menu,超過六項就會以more的功能項來表示其餘的選項,此稱為Expanded Menu ,當功能表第一次被打開時,系統會呼叫onCreateOptionsMenu(),用該方法產生並傳遞給應用程式功能表對象。可以把這些功能表定義在xml或是在java中呼叫add()方法來產生功能表
小試身手小範例:
本範例中,先將每個MenuItem的ItemID設定好,並用整數儲存,接著使用onCreateOptionsMenu()建立功能表項目,其中itemID是用來識別MenuItem的唯一整數。
OptionMenu.java
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
publicclass OptionMenu extends Activity {
//設定功能表項目ID
publicstaticfinalintaboutBtnId = Menu.FIRST;
publicstaticfinalintexitBtnId = Menu.FIRST+1;
/** Called when the activity is first created. */
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
//建立功能表項目
publicboolean onCreateOptionsMenu(Menu menu){
//使用menu.add方法,參數分別為(GroupID、MenuID、順序、顯示字串)
menu.add(0, aboutBtnId, 0, "about");
menu.add(0, exitBtnId, 0, "exit");
return true;
}
//處理被選擇的功能表項目
publicboolean onOptionsItemSelected(MenuItem item){
super.onOptionsItemSelected(item);
//使用MenuItem中的getItemId()方法來取得目前被選取的項目,進行適當的處理事件
switch(item.getItemId()){
caseaboutBtnId:
openDialog();
break;
caseexitBtnId:
finish();
break;
}
returntrue;
}
privatevoid openDialog() {
// TODO Auto-generated method stub
//警告視窗
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("About").setMessage("About OptionsMenu");
builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
publicvoid onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel();
}
}).show();
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Please push the menu button!"
android:textSize="20sp"
/>
</LinearLayout>
按下about按鍵後
小試身手小範例二:
在範例二中加入超過六個的項目至Menu中,可以發現一個畫面最多只能放六個項目,超過的時候在第六個item上會有一個按鈕為more,點選之後就可以選到其他的MenuItem
OptionMenu.java
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
publicclass OptionMenu extends Activity {
//設定功能表項目ID
publicstaticfinalintaboutBtnId = Menu.FIRST;
publicstaticfinalintexitBtnId = Menu.FIRST+1;
publicstaticfinalintsearchBtnId = Menu.FIRST+2;
publicstaticfinalintaddBtnId = Menu.FIRST+3;
publicstaticfinalintremoveBtnId = Menu.FIRST+4;
publicstaticfinalintplayBtnId = Menu.FIRST+5;
publicstaticfinalintopenBtnId = Menu.FIRST+6;
publicstaticfinalintstopBtnId = Menu.FIRST+7;
/** Called when the activity is first created. */
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
//建立功能表項目
publicboolean onCreateOptionsMenu(Menu menu){
//使用menu.add方法,參數分別為(GroupID、MenuID、順序、顯示字串)
menu.add(0, aboutBtnId, 0, "about");
menu.add(0, exitBtnId, 0, "exit");
menu.add(0, searchBtnId, 0, "search");
menu.add(0, addBtnId, 0, "add");
menu.add(0, removeBtnId, 0, "remove");
menu.add(0, playBtnId, 0, "play");
menu.add(0, openBtnId, 0, "open");
menu.add(0, stopBtnId, 0, "stop");
returntrue;
}
//處理被選擇的功能表項目
publicboolean onOptionsItemSelected(MenuItem item){
super.onOptionsItemSelected(item);
//使用MenuItem中的getItemId()方法來取得目前被選取的項目
switch(item.getItemId()){
caseaboutBtnId:
openDialog();
break;
caseexitBtnId:
finish();
break;
}
returntrue;
}
privatevoid openDialog() {
// TODO Auto-generated method stub
//警告視窗
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("About").setMessage("About OptionsMenu");
builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
publicvoid onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel();
}
}).show();
}
}
按下More鑑後
留言列表