【问题标题】:Show popup menu when action bar item is clicked单击操作栏项目时显示弹出菜单
【发布时间】:2016-07-07 02:15:01
【问题描述】:

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

我尝试过的事情:

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

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

我不明白为什么 PopupMenu 不显示任何图标。我尽可能地遵循“官方”代码,但无济于事。

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

请帮忙! 谢谢!

【问题讨论】:

    标签: android


    【解决方案1】:

    使用 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);
    }
    

    【讨论】:

    • 提示:您可以通过使用DIA = diaSemana[item.getItemId()]; 来消除整个switch..case :)
    【解决方案2】:

    您可以尝试使用 ImageView 和 TextView 创建布局。在 PopUpWindow 中扩展该布局(请参阅:http://developer.android.com/reference/android/widget/PopupWindow.html)。

    使用 showAsDropDown(View actionBarIcon) 方法在您的操作栏图标单击时显示菜单。

    【讨论】:

    • 你能发布你的代码吗?这可能有助于清理东西。
    【解决方案3】:

    我使用支持库 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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多