【问题标题】:Up arrow does not show after calling ActionBarDrawerToggle.setDrawerIndicatorEnabled(false)调用 ActionBarDrawerToggle.setDrawerIndicatorEnabled(false) 后向上箭头不显示
【发布时间】:2015-01-02 12:15:46
【问题描述】:

标题说明了一切。当我调用mDrawerToggle.setDrawerIndicatorEnabled(false) 时,我不想再显示“hamburger”图标,而是显示向后导航箭头。

不幸的是,当我调用此方法时,只显示了标题,没有向后箭头,也没有“汉堡包”图标。在将drawerIndicatorEnabled 再次设置为 true 后,它再次显示“汉堡包”图标。

我设置了getSupportActionBar().setDisplayHomeAsUpEnabled(true)getSupportActionBar().setDisplayShowHomeEnabled(true)

编辑: 基本上这里建议的解决方案:Change drawer icon back to back arrow 不知何故没有给我返回箭头。

有人知道这个问题的解决方案吗?非常感谢!

【问题讨论】:

  • 我认为没有办法。最简单的解决方法是当抽屉滑入时setDrawerIndicatorEnabledtrue,当它关闭时false。 (假设您希望使用后退箭头关闭抽屉)
  • 但是在禁用drawerIndicator(或设置监听器)后无法再启用向后导航箭头是否正常?当我没有任何 ActionBarDrawerToggle 侦听器并设置 setHomeAsUpEnabled(true) ...
  • ActionBarDrawerToggle 的好处在于它根据抽屉状态自行管理图标。我认为这很正常。
  • 但是您的解决方法仍然对我不起作用。我的问题是我在 mDrawerToggle.setDrawerIndicatorEnabled(true) 上总是有汉堡包图标,没有图标,只有 mDrawerToggle.setDrawerIndicatorEnabled(false) 上的标题。我想如何使用您的解决方案获得向后导航箭头?
  • 之前不清楚,抱歉。

标签: android navigation-drawer


【解决方案1】:

经过数小时的试验和错误,我想出了一个解决方案,允许从“汉堡包”切换到“箭头”并返回。 这非常奇怪和不自然,不要问我为什么它会这样工作,但它确实有效。此外,这是唯一允许我这样做的解决方案,没有其他工作。 p>

我只有一个带有片段的活动。当我从一个片段切换到另一个片段时,我在我的活动displayingInnerFragment 中设置布尔变量。对于displayingInnerFragment == true 的那些片段,我在左上角显示“箭头”,对于所有其他片段,我显示“汉堡包”。我在切换到任何片段之前执行以下代码:

    ActionBar actionBar = getSupportActionBar();
    if (displayingInnerFragment) {
        actionBar.setDisplayHomeAsUpEnabled(false);
        drawerToggle.setDrawerIndicatorEnabled(false);
        actionBar.setDisplayHomeAsUpEnabled(true);
    } else {
        drawerToggle.setDrawerIndicatorEnabled(true);
    }

注意在一个分支中对actionBar.setDisplayHomeAsUpEnabled() 的双重调用。这是drawerToggle.setDrawerIndicatorEnabled(false) 工作所必需的。否则将无法正常工作。所有其他选项要么不显示“箭头”,要么在某个时刻隐藏“箭头”或“汉堡包”。

【讨论】:

  • 这很奇怪。这到底是怎么回事?
  • 好的。这到底是如何工作的?它是否适用于所有 Android 版本,因为使用此解决方案发布应用程序是否安全?...感谢您为我节省了数小时的不懈工作
  • 圣母。有效!太感谢了。没有你的回答,我不可能找到它
  • 很高兴看到后退箭头,但它没有抓住点击,如何使用这个显示的后退箭头返回到backstack?
  • @hanry 不要将 ActionBarDrawerToggle 与包含工具栏的构造函数一起使用!
【解决方案2】:

这样使用:

mDrawerToggle.setHomeAsUpIndicator(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
mDrawerToggle.setDrawerIndicatorEnabled(false);
mDrawerToggle.syncState();

【讨论】:

  • 不知道为什么答案被否决。对我来说,使用 mDrawerToggle.syncState() 添加行是一种解决方案。
  • 这应该被标记为正确答案,因为它很简单并且不包含任何黑客。
  • 感谢syncState(),但是我们为什么要使用R.drawable.abc_ic_ab_back_mtrl_am_alpha,它改变了每个版本的API,为什么它在这里?
【解决方案3】:

这个让我难过一阵子,因为我知道有一个默认的向上图标正在使用(通过查看ActionBarDrawerToggle 的来源),我希望它采用R.attr.colorControlNormal 的颜色集。令人惊讶的是,这两行的顺序对于实际显示向上箭头至关重要:

mDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

setDrawerIndicatorEnabled 必须在您的ActionBarDrawerToggle 上调用 setDisplayHomeAsUpEnabled 在您的ActionBar 上调用。必须调用这两行才能显示默认(有色)箭头。

【讨论】:

    【解决方案4】:

    我也遇到了同样的问题(可能是显示的

    附加信息:我正在使用支持库 25,因此它可能会在此处发挥作用,因为我没有使用以前的库版本进行测试。我将 Toolbar 设置为操作栏,并使用其中包含 Toolbar 参数的方法设置 ActionDrawerToggle。不过,我只在 Android M 设备上进行了测试。

    下面的代码是我如何启用/禁用导航抽屉(功能位于 NavigationDrawer 片段中)。

    public void setDrawerEnabled(final boolean enabled) {
    
        int lockMode = enabled ? DrawerLayout.LOCK_MODE_UNLOCKED :
                DrawerLayout.LOCK_MODE_LOCKED_CLOSED;
    
        mDrawerLayout.setDrawerLockMode(lockMode);
        mDrawerToggle.setDrawerIndicatorEnabled(enabled);
    
        ActionBar actionBar = null;
        if (getActivity() instanceof AppCompatActivity) {
            actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
        }
    
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(!enabled);
            actionBar.setDefaultDisplayHomeAsUpEnabled(!enabled);
            actionBar.setDisplayShowHomeEnabled(enabled);
            actionBar.setHomeButtonEnabled(enabled);
        }
    
        mDrawerToggle.syncState();
    
        mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
    
                if (!mDrawerToggle.isDrawerIndicatorEnabled())
                    getActivity().onBackPressed();
    
            }
        });
    }
    

    在我的情况下,设置actionBar.setHomeButtonEnabled(enabled); 会强制它绘制菜单图标(或者,在我的情况下,当第一个片段恢复时,不会有任何导航图标),尽管它会停止呈现 mDrawerToggle.syncState(); 可以为我解决这个问题。现在两个图标都正确显示了!

    我希望这对某人有帮助!

    【讨论】:

      猜你喜欢
      • 2020-05-31
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      相关资源
      最近更新 更多