2012-03-26 54 views
10

我已經實現了PopupMenu,用於在按下ActionBar上的項目後顯示的菜單。我想知道在11之前SDK版本有什麼替代方案嗎?適用於蜂窩前PopupMenu的替代方案

可能使用類似上下文菜單的東西。你怎麼看?

雖然我目前的實現是加載一個新的活動與菜單項。

+1

我會用'CHOICE_MODE_SINGLE'彈出'AlertDialog'。 – sastraxi 2012-03-26 20:05:40

+0

我在做類似的事情! http://stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42 2013-05-18 16:02:00

回答

13

正如@sastraxi所建議的,一個好的解決方案是使用AlertDialogCHOICE_MODE_SINGLE

AlertDialog.Builder builder = new AlertDialog.Builder(MyAndroidAppActivity.this); 
builder.setTitle("Pick color"); 
builder.setItems(R.array.colors, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
      // The 'which' argument contains the index position 
      // of the selected item 
     } 
}); 
builder.setInverseBackgroundForced(true); 
builder.create(); 
builder.show(); 

和strings.xml文件。

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string-array name="colors"> 
     <item >blue</item> 
     <item >white</item> 
    </string-array> 
</resources> 

參考:Adding a List

+1

這工作真的很好:) – 2014-02-26 13:07:25

7

或者,你可以使用一個floating context menu


(3年後,實際上讀取浮動上下文菜單隻適用於長時間點擊和匆忙編輯答案)。

你需要再註銷它(這樣的行動項目長期點擊沒有觸發再次)註冊您的視圖的上下文菜單,打開菜單,:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == R.id.my_menu_item) { 
     View view = item.getActionView(); 
     registerForContextMenu(view); 
     openContextMenu(view); 
     unregisterForContextMenu(view); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

和當然,按照鏈接的文檔實現onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)

如OP所述,更好的選擇是在這種特殊情況下使用AlertDialog,如果您想要居中對話框,或者如果您希望將菜單固定到操作項目,則爲PopupMenu。彈出菜單雖然可能很奇怪,因爲它會感覺像是一個溢出菜單。

+0

OP,我認爲你的答案更適合你的用例,因爲浮動的上下文菜單是隻有在長時間按下時沒有我上面添加的黑客觸發。 – ataulm 2015-02-19 22:24:08

+0

很好。我已經重新接受了自己。感謝您維護您的答案:) – 2015-02-19 23:36:38