如何让Android菜单无法点击?

时间:2017-10-04 00:36:44

标签: android android-menu

我需要暂时禁用应用栏上的菜单(带有3个点的菜单,附带截图)我还没有通过Android API找到方法。这是一个应用程序教程体验。教程结束后,我需要重新启用它。

Menu illustration

理想情况下,我希望它保持可见但不可点击。这样当用户按下它时菜单就不会打开。 我也可以暂时让它不可见(但也找不到办法)。

有没有人对如何做到这一点有任何见解?

编辑:为了澄清,我需要禁用菜单按钮本身,而不是其中的菜单项。

谢谢!

2 个答案:

答案 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();