標籤:
什麼是Context menu
在案頭電腦,我們都很熟悉Context menu,按滑鼠右鍵顯示的菜單就是context菜單。在Android中,通過長時間滑鼠按鍵可以觸發context菜單。對於觸屏裝置,手指長按就是長滑鼠按鍵事件。
一個activity有一個且只能有一個OptionMenu,一個view可以有一個且最多隻能有一個ContextMenu。檢查滑鼠長按是基於view來監聽。因此一個activity中可有多少個view,就可以有多少個ContextMenu。
註冊View帶有Context menu
如果某個view帶有Context menu,需要先在onCreate()中註冊,代碼如下
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pure_text);
//小例子中只有一個全屏的TextView
infoTv = (TextView)findViewById(R.id.pureInfo);
//【步驟1】:在onCreate()中為view註冊context菜單
registerForContextMenu(infoTv);
}
填Context菜單內容
註冊之後,我們要具體編寫功能表項目,將重寫onCreateContextMenu(),例子代碼如下:
private static int TV_CONTEXTMENU_BASE = 1000;
//第一個參數是預構的ContextMenu對象,第二個參數是所註冊的view,第三個參數一般我們不使用,但是有時view需要需要通過該參數傳遞資訊。ContextMenuInfo是介面,實現的類有AdapterContextMenuInfo和ExpandableContextMenu。如果傳遞的資訊和cursor有關,可以使用AdapterContextMenuInfo來傳遞rowId。
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
//設定標題表徵圖和標題,並添加兩個功能表項目
menu.setHeaderIcon(R.drawable.leaf);
menu.setHeaderTitle("Context Menu :");
menu.add(Menu.NONE, TV_CONTEXTMENU_BASE,TV_CONTEXTMENU_BASE, "item.1");
menu.add(Menu.NONE, TV_CONTEXTMENU_BASE + 1,TV_CONTEXTMENU_BASE + 1,"item.2");
//子功能表嵌套測試
SubMenu subMenu = menu.addSubMenu("子功能表");
subMenu.setHeaderIcon(R.drawable.clock);
subMenu.add(Menu.NONE,TV_CONTEXTMENU_BASE + 100, + TV_CONTEXTMENU_BASE + 100,"sub.1");
subMenu.add(Menu.NONE,TV_CONTEXTMENU_BASE + 101, + TV_CONTEXTMENU_BASE + 101,"sub.2");
}
ContextMenu和OptionMenu在初始化中是有區別的,OptionMenu是在Activity建立時進行的,而ContextMenu則是每次長按滑鼠事件時觸發的。對於同一個view,每次長按鍵都會調用onCreateContextMenu()。經過跟蹤,每次返回新的ContextMenu對象,也就是ContextMenu是即時建立的,這點要注意。
Context菜單點擊觸發
ContextMenu是Menu介面的實現,觸發機制非常相似。例子代碼如下:
@Override
public boolean onContextItemSelected(MenuItem item) {
if(item.getItemId() == TV_CONTEXTMENU_BASE){
showInfo("item.1 was clicked ");
}else{
showInfo("ItemId " + item.getItemId() + " has nothing done");
}
return super.onContextItemSelected(item);
}
本博文涉及的例子代碼,可以在Pro Android學習:Menu中下載。
相關連結: 我的Android開發相關文章
Pro Android學習筆記(三二):Menu(3):Context菜單