如何在单击操作栏项时添加菜单弹出窗口(请参见屏幕截图)?我希望菜单项显示一个图标。
我尝试过:
为操作栏项设置actionProvider(支持lib v7)。在actionProvider中,为onCreateActionView返回null。在onPrepareSubMenu中,填充子菜单。这适用于Android 2.x但不适用于Android 4.0,而对于Android 2.x,则没有图标。
在actionProvider中,创建一个imageview,点击后会显示一个PopupMenu,但是当我专门使用setIcon来显示它时,弹出菜单没有图标。
我不明白为什么PopupMenu没有显示任何图标。我跟着"官方"代码尽可能接近但无济于事。
请帮忙! 谢谢!
答案 0 :(得分:4)
使用popUpMenu - >>>遵循>
RES /菜单/ horario.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_MudaDia"
android:titleCondensed="Mudar Dia"
android:title="Mudar Dia"
android:icon="@drawable/ic_menu_popup"
android:showAsAction="always">
</item>
activity.class
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
inflater.inflate(R.menu.horario, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_MudaDia:
View vItem = getActivity().findViewById(R.id.menu_MudaDia);
PopupMenu popMenu = new PopupMenu(getActivity(), vItem);
for (int i = 0; i < diaSemana.length; i++)
{
popMenu.getMenu().add(0, i, i, diaSemana[i]);
}
popMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
DIA = diaSemana[item.getItemId()];
atualizaGUI();
return true;
}
});
popMenu.show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
答案 1 :(得分:1)
您可以尝试使用ImageView和TextView创建布局。在PopUpWindow中夸大该布局(参见:http://developer.android.com/reference/android/widget/PopupWindow.html)。
使用showAsDropDown(查看actionBarIcon)方法显示操作栏图标上的菜单。
答案 2 :(得分:1)
我使用支持库v7并且运行良好。
我使用自定义ActionProvider,它在2.x和4.x上运行良好,
onPrepareSubMenu
subMenu.clear();
// labels contain list item text.
int len = labels.length;
for(int i = 0; i < len; i++) {
subMenu.add(0, labels[i], i, labels[i])
.setIcon(icons[i])
.setOnMenuItemClickListener(new MineMenuItemClickListener());
}
super.onPrepareSubMenu(subMenu);
PopupMenu不会将图标显示为默认图标,但您可以自己创建PopupMenu并设置图标显示。
像这样的人CustomPopupMenu
唯一的修改是添加mPopup.setForceShowIcon(true);