[Android]上下文菜單ContextMenu的使用

上下文菜單

又稱長按菜單。當一個視圖註冊瞭上下文菜單時,執行一個在該對象上長按(2秒)的動作,將出現一個具有相關功能的浮動菜單。

 

類概述

擴展自Menu的上下文菜單提供瞭修改上下文菜單頭(header)的功能。

 

上下文菜單不支持菜單項的快捷方式和圖標。

 

公共方法

public abstract void clearHeader ()

清除上下文菜單頭的信息。(包括圖片和文字信息)

 

public abstract ContextMenu setHeaderIcon (Drawable icon)

為上下文菜單頭設置圖標

 

public abstract ContextMenu setHeaderIcon (int iconRes)

設置上下文菜單頭圖標為指定的資源id

 

public abstract ContextMenu setHeaderTitle (int titleRes)

通過資源標識符為上下文菜單頭的標題欄設置文字。

 

public abstract ContextMenu setHeaderTitle (CharSequence title)

設置上下文菜單的標題,顯示在標題欄

 

public abstract ContextMenu setHeaderView (View view)

設置View 到上下文菜單頭上。將替代上下文菜單頭的圖標和標題(或者替代你之前設置的headerView)

 

代碼示例

當執行長按上下文菜單時,大多數情況會調用registerForContextMenu(View) 函數和重寫執行onCreateContextMenu(ContextMenu, View, ContextMenu.ContextMenuInfo)函數。因為要創建一個上下文菜單,你必須重寫這個活動的上下文回調函數onCreateContextMenu() 並且 通過registerForContextMenu(View) 為其註冊上下文菜單。

註冊上下文菜單

[java] view plaincopy

registerForContextMenu(lv);//為ListView添加上下文菜單         

添加菜單項

[java] view plaincopy

@Override  

public void onCreateContextMenu(ContextMenu menu, View v,  

        ContextMenuInfo menuInfo) {  

    // TODO Auto-generated method stub  

       try {  

        AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;     

           JSONObject object = mData.getJSONObject(info.position);  

           menu.setHeaderTitle(object.getString("title"));  

       } catch (Exception e) {  

           return;  

       }  

    menu.add(0, 1, 0, "刪除該聊天");  

    menu.add(0, 2, 0, "置頂聊天");  

    super.onCreateContextMenu(menu, v, menuInfo);  

}  

  

@Override  

public boolean onContextItemSelected(MenuItem item) {  

    // TODO Auto-generated method stub  

    AdapterContextMenuInfo itemInfo = (AdapterContextMenuInfo) item.getMenuInfo();  

    try {  

        JSONObject object = mData.getJSONObject(itemInfo.position);  

        switch (item.getItemId()) {  

        case 1:  

            Toast.makeText(this, object.getString("title"), Toast.LENGTH_LONG).show();  

            break;  

        default:  

            break;  

        }  

    } catch (JSONException e) {  

        // TODO Auto-generated catch block  

        e.printStackTrace();  

    }  

    return super.onContextItemSelected(item);  

}  

 

效果圖

 

長按“姓名2”

 

點擊“刪除該聊天”

發佈留言