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

标签 android android-fragments android-actionbar android-navigation navigation-drawer

在我的主要 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();

在我的一个 fragment 中,我想完全禁用 1)滑动以打开抽屉导航和 2)用于切换抽屉导航打开的汉堡包/切换按钮

目前,我正在这样做:

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

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

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

最佳答案

最简单的方法可能就是将 DrawerArrowDrawable 设置为切换按钮的向上指示器,并像往常一样启用/禁用抽屉指示器。

初始化 ActionBarDrawerToggle 后,调用:

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

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

关于android - 禁用 ActionBarDrawerToggle 抽屉指示器,但保留汉堡包图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36728668/

相关文章:

android - 夏洛克 : android:textAllCaps requires API level 14 (current min is 8)

android - 在不扩展 ActionBarActivity 的情况下使用 android.support.v7.app.ActionBar

java - 更改 imageview 正在旧图像的顶部绘制

java - 无法解析抽屉导航中 fragment 中的 getSystemService

android - 如何使用 ViewFlipper 移动到某个 View ?

android - 应用程序终止后 getArguments() 上的 ClassCastException

android - Cordova 4.0 上 Android Fragment 内的 Cordova webview

java - 设置图像时操作栏标题消失

android - 添加 Spinner 作为 ListView 数据

android - setProgressDrawable 填充整个seekBar