古詩詞大全網 - 成語經典 - contextmenu和optionmenu的區別

contextmenu和optionmenu的區別

妳好,區別如下:

ContextMenu是android的context menu上下文菜單,選擇某項VIEW後長按menu鍵,就會顯示出來。

比如Edit Text就可以通過長按來彈出擁有“cut”,"copy","paste"等項的ContextMenu。

實現ContextMenu,壹般要用到以下三個方法:

(1)registerForContextMenu(getExpandableListView());

(2)onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo);

(3)onContextItemSelected(MenuItem item);

>>ContextMenu和OptionsMenu相比主要有以下區別:

1,ContextMenu必須通過Activity的registerForContextMenu(View)來進行註冊,而OptionsMenu不用。

2,ContextMenu不支持icon,而OptionsMenu支持。

3,ContextMenu可以有頭,可以通過setHeaderIcon,setHeaderTitle,setHeaderView來設置頭,否則就沒有頭。

4,彈出的方式不壹樣。

5,Options Menu的擁有者是Activity,而上下文菜單的擁有者是Activity中的View。

每個Activity有且只有壹個Options Menu,它為整個Activity服務。

而壹個Activity往往有多個View,並不是每個View都有上下文菜單,這就需要我們調用registerForContextMenu(View view)來指定。

註意事項:ContextMenu的任何項在被選中後,整個ContextMenu會自動被系統關閉掉,即使多選項也是這樣。這樣的話,多選項的行為就有些怪異。查看Android的源碼後,發現這是個Android的bug,應該是google沒考慮多選項的情況。

盡管上下文菜單的擁有者是View,生成上下文菜單卻是通過Activity中的onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo)方法,該方法很像生成Options Menu的onCreateOptionsMenu(Menu menu)方法。

兩者的不同在於,onCreateOptionsMenu只在用戶第壹次按“Menu”鍵時被調用,

而onCreateContextMenu會在用戶每壹次長按View時被調用,而且View必須已經註冊了上下文菜單。

另壹個值得註意的就是上圖中的ContextMenuInfo,該類的對象被傳入onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo)方法,那麽它有什麽用呢?有時候,視圖元素需要向上下文菜單傳遞壹些信息,比如該View對應DB記錄的ID等,這就要使用ContextMenuInfo。需要傳遞額外信息的View需要重寫getContextMenuInfo()方法,返回壹個帶有數據的ContextMenuInfo實現類對象。

介紹了這麽多,下面給出壹個demo演示如何創建和響應上下文菜單:

1.在activity的onCreate(...)方法中為壹個view註冊上下文菜單

2.在onCreateContextMenuInfo(...)中生成上下文菜單。

3.在onContextItemSelected(...)中響應上下文菜單項。