单击操作栏项时显示弹出菜单

时间:2014-04-25 13:03:02

标签: android

enter image description here

如何在单击操作栏项时添加菜单弹出窗口(请参见屏幕截图)?我希望菜单项显示一个图标。

我尝试过:

  1. 为操作栏项设置actionProvider(支持lib v7)。在actionProvider中,为onCreateActionView返回null。在onPrepareSubMenu中,填充子菜单。这适用于Android 2.x但不适用于Android 4.0,而对于Android 2.x,则没有图标。

  2. 在actionProvider中,创建一个imageview,点击后会显示一个PopupMenu,但是当我专门使用setIcon来显示它时,弹出菜单没有图标。

  3. 我不明白为什么PopupMenu没有显示任何图标。我跟着"官方"代码尽可能接近但无济于事。

    http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/widget/ShareActionProvider.java#195

    请帮忙! 谢谢!

3 个答案:

答案 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

我使用自定义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不会将图标显示为默认图标,但您可以自己创建PopupMenu并设置图标显示。

像这样的人CustomPopupMenu

唯一的修改是添加mPopup.setForceShowIcon(true);