我真的很喜欢3.0中提供的新PopupMenu,但是我不能在其中的菜单项旁边显示任何图标。我正在从下面的.xml扩展菜单:
<item android:id="@+id/menu_delete_product"
android:icon="@drawable/sym_action_add"
android:title="delete"
android:showAsAction="ifRoom|withText" />
<item android:id="@+id/menu_modify_product"
android:icon="@drawable/sym_action_add"
android:title="modify"
android:showAsAction="ifRoom|withText" />
<item android:id="@+id/menu_product_details"
android:icon="@drawable/sym_action_add"
android:title="details"
android:showAsAction="ifRoom|withText" />
使用此代码:
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu pop = new PopupMenu(getActivity(), v);
pop.getMenuInflater().inflate(R.menu.shelves_details_menu, pop.getMenu());
pop.show();
}
});
我无法显示图标,我丢失了什么吗?
[如果您愿意冒险,请查看Google的PopupMenu源代码。创建您自己的类,即MyPopupMenu,该类与Google的PopupMenu类相同,但要稍作更改。
沿着反射线使用,无需使用MenuPopupHelper
,您可以添加
无法完全自定义PopupMenu。在下面,您找到了一种通用的解决方案,可以通过自定义布局使PopupMenu可自定义。有了它,您可以对不同的布局进行更多的实验。干杯。
对Gaelan Bolger提供的解决方案的贡献。如果收到“ IllegalAccessException:不允许访问字段”,请使用此代码。
我能够使用反射显示图标。它可能不是最优雅的解决方案,但它可以工作。
我们可以使用子菜单模型。因此,我们不需要编写用于显示弹出菜单的方法,它将自动显示。看看:
在使用方法popup.show()之前,创建一个MenuPopupHelper实例并调用方法setForceShowIcon(true),像这样
我发现的最简单的方法是使用MenuBuilder
和MenuPopupHelper
。
我使用MenuPopupHelper.setForceShowIcon(true)
找到了本机解决方案。
PopupMenu将不显示图标。您可以使用ActionBar。
上面的某些解决方案将与反射黑客一起使用,