例如希望在一個id為main的佈局版面上提供Context menu,可在Activity之onCreate()方法中使用registerForContextMenu()方法來為該佈局物件註冊Context menu。
public void onCreate(Bundle savedInstanceState) {
...
LinearLayout lv = LinearLayout)findViewById(R.id.main);
registerForContextMenu(lv);
}
接著我們需要為Context menu建構功能表項目內容及實作功能表項目作業程式碼,參照下列程序,為Activity建立onCreateContextMenu()及onContextItemSelected ()程式框架:
1. 由Source功能表點選「Override/Implement Methods...」功能表項目。
2. 由對話視窗之「Select methods to override or implements:」清單中勾選「onContextItemSelected()」及「onCreateContextMenu()」項目,按下「OK」按鈕,ADT就會建立所需的程式框架。
Options menu的onCreateOptionsMenu()只需調用乙次,而Context menu則是每次顯示時都會調用onCreateContextMenu()。程式中同樣可使用add()方法將功能表項目加到Context menu中;或使用addSubMenu()方法加入子功能表。
Context menu功能表項目不支援圖示,但允許結合核取方塊或圖形選取鈕介面來呈現功能表項目的狀態,所以同樣可以使用以下方法:
setCheckable(true) 在功能表項目上顯示核取方塊。setCheckable(false) 功能表項目不顯示核取方塊。
setChecked(true) 設定功能表項目之核取方塊為勾選狀態。
setChecked(false) 設定功能表項目之核取方塊為取消勾選狀態。
final int MENU_QUIT = 100;
final int MENU_ABOUT = 101;
final int MENU_AUTHOR = 102;
...
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, MENU_QUIT, 0, "結束");
Menu abtmenu = menu.addSubMenu(0, MENU_ABOUT, 0, "關於...");
abtmenu.add(0, MENU_AUTHOR, 0, "作者");
abtmenu.add(0, MENU_PROG, 0, "Android程式");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()){
case MENU_AUTHOR:
Toast.makeText (MainActivity.this, R.string.author, Toast.LENGTH_SHORT).show();
break;
case MENU_PROG:
Toast.makeText (MainActivity.this, R.string.prog, Toast.LENGTH_SHORT).show();
break;
case MENU_QUIT:
finish();
}
return super.onContextItemSelected(item);
}