2013-07-29 55 views

回答

3

您可以充氣自己的菜單,然後隱藏操作系統插入的所有項目。

首先,跟蹤所有的ID爲您的菜單項:

List<Integer> mOptionsList = new ArrayList<Integer>(); 

/* put these two lines in onCreate() */ 
mOptionsList.add(R.id.my_option_1); 
mOptionsList.add(R.id.my_option_2); 

然後,隱藏任何菜單項,是不是你在onPrepare:

private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() { 

    public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
     MenuInflater inflater = mode.getMenuInflater(); 
     inflater.inflate(R.menu.my_contectual_menu, menu); 
     return true; 
    } 

    public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 
     for (int i = 0; i < menu.size(); i++) { 
      MenuItem item = menu.getItem(i); 
      if (!mOptionsList.contains(item.getItemId())) 
       item.setVisible(false); 
     } 
     return false; 
    } 

    public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.my_option_1: { 
       /* do something for option 1 */ 
       break; 
      } 
      case R.id.my_option_2: { 
       /* do something for option 2 */ 
       break; 
      } 
      default: 
       return false; 
     } 
    } 

    public void onDestroyActionMode(ActionMode mode) {} 
}; 
+0

my_contectual_menu包含什麼?這不會只是誇大我們自己的菜單沒有任何系統的東西?那麼刪除onPrepareActionMode中的項目有什麼意義? – thisiscrazy4

+0

這是您菜單的資源。默認情況下,操作系統會膨脹菜單,但會將其與系統菜單合併。這就是爲什麼我隱藏不屬於我的物品。 – Krylez

+0

我創建了自己的菜單,但是CAB只包含我在資源文件中添加的項目。它沒有任何系統的東西。這不需要在onPrepareActionMode函數中做任何事情。 – thisiscrazy4

0

如果你想清除默認圖標,你只需使用menu.clear()。例如改變上面的代碼中,我們有 私人ActionMode.Callback mActionModeCallback =新ActionMode.Callback(){

public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
    menu.clear; 
    ... 

    return true; 
} 

要刪除特定的圖標,你需要有一個圖標的ID。它會像menu.removeItem(android.R.id.copy)之類的東西。

相關問題