我需要暂时禁用应用栏上的菜单(带有3个点的菜单,附带截图)我还没有通过Android API找到方法。这是一个应用程序教程体验。教程结束后,我需要重新启用它。
理想情况下,我希望它保持可见但不可点击。这样当用户按下它时菜单就不会打开。 我也可以暂时让它不可见(但也找不到办法)。
有没有人对如何做到这一点有任何见解?
编辑:为了澄清,我需要禁用菜单按钮本身,而不是其中的菜单项。
谢谢!
答案 0 :(得分:0)
只需删除或注释您的方法onCreateOptionsMenu
答案 1 :(得分:0)
只需创建一个包含分组的自定义XML菜单,但将分组图标设为三点。然后没有儿童元素它什么也不做。如果您决定稍后可以点击,则可以动态地将项目添加到代码中的分组。虽然我不确定为什么如果你不想让它们点击它就会让它显而易见。为什么不在需要不可用时将其删除?
编辑清晰度: 因此,如果您愿意,可以使用XMl组中没有任何内容的菜单。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<group android:id="@+id/myGroup">
</group>
</menu>
然后膨胀这个并且它不会被点击,但这似乎不是一个好的解决方案所以我希望你选择一个不同的方向。
你也可以做其他两种方式。 获取对要删除的菜单项的引用,如:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_filter"
android:icon="@drawable/ic_menu_filter"
app:showAsAction="always"
android:actionViewClass="android.widget.ImageButton"
android:title="@string/filter">
//other items here
</menu>
MenuItem mMenuFilterItem = null;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_news_fragment, menu);
super.onCreateOptionsMenu(menu, inflater);
mMenuFilterItem = menu.findItem(R.id.action_filter)
//then you can hide and show as necessary
if(shouldHide){
mMenuFilterItem.setVisible(false);
}
}
//然后在其他代码区域中,您可以使用与上面相同的方式隐藏和显示。
或者,&#34;这可能是最好的&#34;,你可以简单地使菜单失效并跳过膨胀。
setHasOptionsMenu(false); //if fragment and
getActivity().invalidateOptionsMenu();
//这将导致它跳过片段中的onCreateOptionsMenu并从头开始重绘并将其留空。然后反过来把它放回去。
现在,如果您正在参加活动,那么您只需要
MenuItem mMenuFilterItem = null;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if(!shouldHide){
inflater.inflate(R.menu.menu_news_fragment, menu);
}
super.onCreateOptionsMenu(menu, inflater);
}
//然后当你需要隐藏它时才设置
shouldHide = true;
invalidateOptionsMenu()
//然后把它放回去
shouldHide = false;
invalidateOptionsMenu();