2017-02-11 9 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

Можете ли вы объяснить, почему это другое и почему это работает? Мне кажется, что код OP для меня –

+0

Работает он или нет, 'MenuInflater inflater = popup.getMenuInflater(); inflater.inflate (R.menu.emailmenu, popup.getMenu()); 'как будто вы создаете для него новый объект. im не уверен 100%, но это может быть проблемой –

+0

мой код не работал, но поскольку я не добавил название, чтобы имена не появлялись. так что это была моя первая забота, во-вторых, я хотел начать действие на основе выбранного всплывающего окна. Я ответил правильно, как решил мою проблему. –

 Смежные вопросы

  • Нет связанных вопросов^_^