禁用 ActionBarDrawerToggle 的抽屉指示器,但保留汉堡图标

Disable ActionBarDrawerToggle's drawer indicator, but keep the hamburger icon

在我的主 activity 中,我正在获取对 DrawerLayout 和工具栏的引用,如下所示:

    //Set the toolbar
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    //Set navigation drawer
    drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    hamburger = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(hamburger);
    hamburger.syncState();

在我的一个片段中,我想完全禁用 1) 滑动打开导航抽屉和 2) hamburger/toggle 按钮切换导航抽屉打开

目前,我是这样做的:

mainActivity = (MainActivity)getActivity();
mainActivity.drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
mainActivity.hamburger.setDrawerIndicatorEnabled(false);
mainActivity.hamburger.syncState();

正确处理滑动 - 它不再打开抽屉。

虽然汉堡图标已经完全消失了。理想情况下,我希望汉堡包图标保留在屏幕上,但只是处于禁用状态,以便在单击时它不会执行任何操作。是否有 setDrawerIndicatorEnabled 的替代方法可以以这种方式工作?

执行此操作的最简单方法可能是将 DrawerArrowDrawable 设置为切换的向上指示器,并像往常一样设置 enable/disable 抽屉指示器。

初始化 ActionBarDrawerToggle 后,调用:

hamburger.setHomeAsUpIndicator(new DrawerArrowDrawable(toolbar.getContext()));

DrawerArrowDrawable 实际上是 ActionBarDrawerToggle 用于该动画的,它的默认状态是汉堡包。当您禁用抽屉指示器时,它会切换到向上指示器,但不会收到抽屉 opening/closing 调用,因此它只是处于默认状态。重新启用抽屉指示器会切换回切换开关,它会获取抽屉事件,因此动画也会重新启用。