2016-05-15 2 views
1

Я новичок в android. Я не могу добавить простые значки во всплывающее меню. Я добавил значки в xml-файл, но я не вижу их.Меню PopUp с иконками

Это мое меню - pop_up_menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/action_email" 
     android:icon="@mipmap/email" 
     android:title="E-Mail" 
     /> 
    <item 
     android:id="@+id/action_messenger" 
     android:icon="@mipmap/messenger" 
     android:title="Messenger" 
     /> 
    <item 
     android:id="@+id/action_skype" 
     android:icon="@mipmap/skype" 
     android:title="Skype" 
     /> 
    <item 
     android:id="@+id/action_whatsapp" 
     android:icon="@mipmap/whatsapp" 
     android:title="Whatsapp" 
     /> 
</menu> 

У меня есть эта OnClickListener, что вызвать функцию showPopUpMenu после нажатия на moreActionsButton

moreActionsButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     showPopUpMenu(us); 
    } 
}); 

Это showPopUpMenu, что создает меню

public void showPopUpMenu(final User user) { 
    View menuItemView = getView().findViewById(R.id.groupLeave); 
    PopupMenu popUpMenu = new PopupMenu(getActivity(), menuItemView); 
    popUpMenu.getMenuInflater().inflate(R.menu.pop_up_menu, popUpMenu.getMenu()); 
    popUpMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
     public boolean onMenuItemClick(MenuItem item) { 
      switch (item.getItemId()) { 
       case R.id.action_messenger: 
        onMessengerClick(user); 
        break; 

       case R.id.action_skype: 
        onSkypeClick(user); 
        break; 

       case R.id.action_whatsapp: 
        onWhatsappClick(user); 
        break; 

       case R.id.action_email: 
        onEmailClick(user); 
        break; 

       default: 
        break; 

      } 
      return true; 
     } 
    }); 
    popUpMenu.show(); 
} 
+0

В каком виде всплывающего меню вы пытаетесь сделать? Я думаю, что эти значки используются только на панели инструментов, а не в меню. См. Здесь типы меню. http://developer.android.com/guide/topics/ui/menus.html –

ответ

3

По умолчанию PopupMenu не показывает значки рядом с Ваш заголовок.

Что вам нужно сделать, это либо создать свою собственную реализацию PopupMenu и форсирует использование иконок с помощью переопределения конструктора по умолчанию:

public CustomPopupMenu(Context context, View anchor) { 
     ... 
     mPopup.setForceShowIcon(true); 
    } 

ИЛИ

Просто, прежде чем показывать свой PopupMenu, использовать отражение для вызова желаемого метода

 //... initialization of your PopupMenu 
     Object menuHelper; 
     Class[] argTypes; 
     try { 
      Field fMenuHelper = PopupMenu.class.getDeclaredField("mPopup"); 
      fMenuHelper.setAccessible(true); 
      menuHelper = fMenuHelper.get(popupMenu); 
      argTypes = new Class[]{boolean.class}; 
      menuHelper.getClass().getDeclaredMethod("setForceShowIcon", argTypes).invoke(menuHelper, true); 
     } catch (Exception e) { 
      // Possible exceptions are NoSuchMethodError and NoSuchFieldError 
      // 
      // In either case, an exception indicates something is wrong with the reflection code, or the 
      // structure of the PopupMenu class or its dependencies has changed. 
      // 
      // These exceptions should never happen since we're shipping the AppCompat library in our own apk, 
      // but in the case that they do, we simply can't force icons to display, so log the error and 
      // show the menu normally. 
     } 
     popUpMenu.show(); 
+0

Спасибо! вашим вторым вариантом было решение – user3077648

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