【问题标题】:Opening Popup menu instead of default action bar menu打开弹出菜单而不是默认操作栏菜单
【发布时间】:2018-11-27 10:52:53
【问题描述】:

由于我无法阻止默认操作栏菜单在选择项目后关闭,所以我想改用弹出菜单。 我想使用与 android 操作栏菜单布局相同的弹出菜单,所以这是我的菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" xmlns:app="http://schemas.android.com/apk/res-auto">

<group android:id="@+id/grp_filtro_selezione" android:checkableBehavior="all">
    <item android:id="@+id/menu_all"
        android:src="@drawable/ic_settings"
        android:title="@string/all_menu"
        android:checked="true"/>
    <item android:id="@+id/menu_aule"
        android:src="@drawable/ic_settings"
        android:title="@string/aule_menu"
        android:checked="false"/>
    <item android:id="@+id/menu_aule_studio"
        android:src="@drawable/ic_settings"
        android:title="@string/aule_studio_menu"
        android:checked="false"/>
</group>
</menu>

我不知道如何使用我的弹出菜单来做这样的事情:

 PopupMenu popup = new PopupMenu(MainActivity.this, v);
 popup.getMenuInflater().inflate(R.menu.pop_up, popup.getMenu());

并禁用默认操作栏菜单。

我想我应该使用 onCreateOptionsMenu()

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.mymenu, menu);

}

但是我怎样才能让我的弹出菜单膨胀呢?

编辑:

我几乎找到了解决方案,但我有一个问题。所以,我所做的是在 onCreateOptionsMenu 中添加了一个仅包含操作栏图标的菜单:

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.prova_menu, menu);
}

在 onOptionsItemSelected 我试过这个:

switch (item.getItemId()) {
        case R.id.settings:
            View menuItemView = getActivity().findViewById(R.id.settings); 
            popupMenu = new PopupMenu(getActivity(), menuItemView);
            popupMenu.inflate(R.menu.prova2);
            popupMenu.show();
}

它工作正常,但有一个问题。我正在显示的弹出菜单具有可选项目。当我单击图标再次打开菜单时,所有项目都会重置,可能是因为我每次显示弹出菜单时都会夸大菜单布局。 我尝试在 onCreateOptionsMenu 中只膨胀一次弹出菜单,但在调用 popupMenu.show() 时出现此错误。

 MenuPopupHelper cannot be used without an anchor

【问题讨论】:

    标签: android popup android-actionbar popupmenu


    【解决方案1】:

    我认为您最有可能使用onCreateOptionsMenu 而不是onCreateContextMenu

    查看菜单上的API descriptionTraining Guide

    【讨论】:

    • 是的,我知道,但我不知道如何使弹出菜单膨胀而不是默认菜单
    • 只需不要在onCreateOptionsMenu 中做任何事情并将代码移动到onCreateContextMenu。使用那里的视图附加弹出窗口。这一切都在培训指南中进行了描述
    • 在我从 onCreateOptionsMenu 中删除所有内容后,如果它们不显示,如何将其附加到操作栏图标?
    • U 在布局中使用自定义工具栏,扩展菜单项(可能使用onCreateOptionsMenu),然后在工具栏中通过 id 找到它们。但是在onOptionItemselected 中,您触发了弹出窗口
    【解决方案2】:

    您是否错过了对 popup.show() 的调用?

    【讨论】:

    • @MarcoRipamonti 如果您正在膨胀工具栏菜单,则在 onOptionsItemSelected 方法中初始化您的弹出菜单。参考这个链接stackoverflow.com/questions/14729592/…
    • @MarcoRipamonti 您的 prova2 菜单文件是否包含 android:showAsAction="always" ??
    猜你喜欢
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    相关资源
    最近更新 更多