android - 打开弹出菜单而不是默认操作栏菜单
问题描述
由于我无法阻止默认操作栏菜单在选择项目后关闭,因此我想到了使用弹出菜单。我想使用与 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
解决方案
推荐阅读
- python - 补丁请求文件上传
- ruby-on-rails - 用于 ActiveRecord_Relation 的 Rails 未定义方法“sanitize_sql_array”
- ansible - Ansible 中的 Jinja 模板将“dest”视为目录而不是文件
- .htaccess - .htaccess 问题 - [L] 标志以任何方式简化
- xslt - 使用 XSLT 从 XML 元素中获取多个属性值
- java - Liferay DXP 7 使用远程 EJB,java.rmi.UnmarshalException:加载失败返回类型:类 java.lang.Object
- database - 我想在 VB.net 中更新我的数据库数据,但我得到错误语法
- sql-job - SQL 作业 Excel 导入行限制
- python - pygame.error:视频系统未初始化(pycharm)
- python-3.x - 熊猫:从宽到长的转换:如何获取行号和列号