Pro Android學習筆記(三二):Menu(3):Context菜單

來源:互聯網
上載者:User

標籤:

什麼是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.NONETV_CONTEXTMENU_BASE,TV_CONTEXTMENU_BASE, "item.1");
    menu.add(Menu.NONETV_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菜單

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.