2015-02-22 2 views
1

Я видел некоторые уроки, но не смог пройти. Я хочу показать значки вместе с текстом элемента. Вот мой пункт меню.Как показать значки вместе с текстом в PopupMenu в android?

<item 
    android:id="@+id/share" 
    android:icon="@drawable/ic_share_grey600_18dp" 
    app:showAsAction="always|withText" 
    android:orderInCategory="1" 
    android:title="Share"/> 

Вот мой Java-код:

PopupMenu popup = new PopupMenu(context, holder.cardMenuButton); 
popup.getMenuInflater().inflate(R.menu.card_overflow_menu, popup.getMenu()); 
popup.show(); 

Я разрабатываю мое приложение в материальном дизайне. Но это только показывает текст.

+0

Вы хотите показать в меню действий или меню переполнения? – Apurva

+0

Я использую CardView, и я положил кнопку действия переполнения в правом углу этого вида карты. при нажатии этой кнопки aciton мне нужно показать всплывающее меню, – Aleena

+0

Изменить 'app: showAsAction =" always | withText "' to 'app: showAsAction =" never "' – Apurva

ответ

2

Простой ответ: вы не можете. Вы можете использовать похожий вид, ListPopWindow, который использует адаптер для рисования своего содержимого, что дает вам необходимую гибкость.

Редактировать. Для проблемы ширины вы должны позвонить setContentWidth. Вы можете легко перебирать по набору данных адаптера для того, чтобы рассчитать максимальную ширину, и использовать это значение в качестве параметра для setContentWidth

+0

Хорошо, позвольте мне попробовать этот, thnx – Aleena

+0

Thnx, точное решение. – Aleena

+0

приветствуются – Blackbelt

0

На самом деле, вы можете, как вы можете увидеть здесь: Is it possible to display icons in a PopupMenu?

На основании этого ответа, здесь это пользовательский класс, который показывает значки:

public class PopupMenu extends android.support.v7.widget.PopupMenu { 

public PopupMenu(Context context, View anchor) { 
    super(context, anchor); 
    setForceShowIcon(); 
} 

public PopupMenu(Context context, View anchor, int gravity) { 
    super(context, anchor, gravity); 
    setForceShowIcon(); 
} 

public PopupMenu(Context context, View anchor, int gravity, 
       int popupStyleAttr, int popupStyleRes) { 
    super(context, anchor, gravity, popupStyleAttr, popupStyleRes); 
    setForceShowIcon(); 
} 

private void setForceShowIcon() { 
    try { 
     Field mPopup = android.support.v7.widget.PopupMenu.class 
       .getDeclaredField("mPopup"); 
     mPopup.setAccessible(true); 
     MenuPopupHelper popup = (MenuPopupHelper) mPopup.get(this); 
     popup.setForceShowIcon(true); 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 
} 
}