如何在Android的PopupMenu中显示文本和图标?

3

我看过一些教程,但是无法理解。我想要在菜单项中显示图标和文本。这是我的菜单项:

  <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();

我正在使用Material Design开发我的应用程序,但它只显示文本。

你想要在操作栏还是溢出菜单中显示? - Apurva
我正在使用CardView,并在该卡片视图的右上角放置了一个溢出操作按钮。点击该操作按钮后,我需要显示一个弹出菜单。 - Aleena
app:showAsAction="always|withText" 更改为 app:showAsAction="never" - Apurva
抱歉,但它没有起作用。 - Aleena
2个回答

3
简单的回答是你不能。你可以使用类似的小部件 ListPopWindow,它使用适配器绘制其内容,为您提供所需的灵活性。
编辑。对于宽度问题,您需要调用setContentWidth。您可以轻松地遍历适配器的数据集以计算最大宽度,并将该值用作setContentWidth的参数。

好的,让我试一下,谢谢。 - Aleena
谢谢,精确的解决方案。 - Aleena

1
实际上,你可以像这样看到:如何在PopupMenu中显示图标? 基于那个答案,这里有一个自定义类可以显示图标:
public class PopupMenu extends androidx.appcompat.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 = androidx.appcompat.widget.PopupMenu.class
                .getDeclaredField("mPopup");
        mPopup.setAccessible(true);
        MenuPopupHelper popup = (MenuPopupHelper) mPopup.get(this);
        popup.setForceShowIcon(true);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接