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

6

在点击操作栏项时如何添加菜单弹出窗口(见截图)?我希望菜单项显示一个图标。</p>

<p>我尝试过的事情:</p>

<ol>
<li><p>为操作栏项设置 actionProvider(支持库 v7)。在 actionProvider 中,对于 onCreateActionView 返回 null。在 onPrepareSubMenu 中,填充子菜单。这适用于 Android 2.x,但不适用于 Android 4.0,并且对于 Android 2.x,没有图标。</p></li>
<li><p>在 actionProvider 中,创建一个 ImageView 并在点击时显示 PopupMenu,但是弹出菜单没有图标,即使我已经使用 setIcon 显示它。</p></li>
</ol>

<p>我不明白为什么 PopupMenu 不显示任何图标。我尽可能地按照“官方”代码进行了跟踪,但无济于事。</p>

<p><a href=http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/widget/ShareActionProvider.java#195

请帮忙!谢谢!

3个回答

5

使用popUpMenu ->>> 跟随>

res/menu/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);
}

2
提示:您可以通过使用“DIA = diaSemana[item.getItemId()];”来消除整个switch..case :) - Luiz Carlos Querino Filho

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


1

你能发一下你的代码吗?这可能有助于澄清问题。 - Codester

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