2017-02-11 152 views
0

在我的Android應用程序中,我有一個菜單選項,當設備具有專用硬件菜單選項時工作。對於另一個設備,我沒有專用的菜單按鈕,所以我嘗試添加一個按鈕,然後點擊該按鈕,彈出窗口將顯示菜單,彈出窗口正在工作,但不顯示選項,並進一步說明如何處理所選彈出選項。Android彈出菜單不加載菜單

我的按鍵佈局如下:

<ImageButton 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:src="@drawable/ic_overflow_holo_dark" 
    android:contentDescription="@string/descr_overflow_button" 
    android:onClick="showPopup" /> 

這是我的代碼,以顯示彈出:

public boolean showPopup(View v) { 
    PopupMenu popup = new PopupMenu(this, v); 
    MenuInflater inflater = popup.getMenuInflater(); 
    inflater.inflate(R.menu.emailmenu, popup.getMenu()); 
    popup.show(); 
    return true; 
} 

這我option代碼:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/bluebutton" android:icon="@drawable/icon_blue_btn" 
     android:title="" /> 
    <item android:id="@+id/zephyr" android:icon="@drawable/icon_zephyrme" 
     android:title="" /> 
    <item android:id="@+id/skype" android:icon="@drawable/icon_skype" 
     android:title="" /> 
</menu> 

我都準備好了有這onCreateOptionsMenu()從專用菜單鍵觸發選項。如何讓它從彈出式工作。

+0

標題是菜單重要 – Jayanth

+0

確定以及如何啓動相關的彈出菜單 –

+0

使用的活動'popup.setOnMenuItemClickListener()' – Jayanth

回答

1

如果你想顯示的圖標,而不是標題,然後創建您的PopupMenu像下面

方法setForceShowIcon(menu);將迫使PopMenu顯示的圖標。 你也可以帶有圖標的文字。

private void showPopupMenu(){ 
    PopupMenu menu=new PopupMenu(this,anchorView); 
    menu.getMenuInflater().inflate(R.menu.popup_menu,menu.getMenu()); 
    setForceShowIcon(menu); 
    menu.setOnMenuItemClickListener(menuClickListner); 
    menu.show(); 
} 

public static void setForceShowIcon(PopupMenu popupMenu) { 
    try { 
     Field[] fields = popupMenu.getClass().getDeclaredFields(); 
     for (Field field : fields) { 
      if ("mPopup".equals(field.getName())) { 
       field.setAccessible(true); 
       Object menuPopupHelper = field.get(popupMenu); 
       Class<?> classPopupHelper = Class.forName(menuPopupHelper 
         .getClass().getName()); 
       Method setForceIcons = classPopupHelper.getMethod(
         "setForceShowIcon", boolean.class); 
       setForceIcons.invoke(menuPopupHelper, true); 
       break; 
      } 
     } 
    } catch (Throwable e) { 
     e.printStackTrace(); 
    } 
} 
//This is Menu click listner 
PopupMenu.OnMenuItemClickListener menuClickListner = new PopupMenu.OnMenuItemClickListener() { 
    @Override 
    public boolean onMenuItemClick(MenuItem item) { 
     switch (item.getItemId()){ 
      case R.id.some_id1: 
       //actions here 
       break; 
      case R.id.some_id2: 
       //actions here.. 
       break; 
      case R.id.some_id3: 
       break; 
      } 
     return false; 
    } 
}; 

希望這有助於!

+0

爲什麼返回設置爲false –

+0

好吧,這是一個很長的答案,你可以在這裏看到答案http://stackoverflow.com/a/23176258/5235032 – Jayanth

0

嘗試這樣

PopupMenu popup = new PopupMenu(MainActivity.this, button1); 
popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu()); 
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
      @Override 
      public boolean onMenuItemClick(MenuItem item) { 
       startActivity(new Intent(MainActivity.this, SecounActivity.class)); 
       return true; 
      } 
     }); 
popup.show(); 
+0

你能解釋爲什麼,如果我想的圖標,而不是標題 –

+0

它工作與否,'MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.emailmenu,popup.getMenu());'它喜歡你爲它創建新的對象。即時通訊不知道100%,但這可能是問題 –

+0

沒有我的代碼工作,但由於我沒有添加標題,所以名稱不來。所以這是我首先關心的問題,其次我想根據選擇的彈出選項開始一項活動。我已標記答案正確,因爲它解決了我的問題。 –