调用ActionBarDrawerToggle.setDrawerIndicatorEnabled后,向上箭头不显示(false)

时间:2015-01-02 12:15:47

标签: android navigation-drawer

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

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

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

修改 基本上这里建议的解决方案:Change drawer icon back to back arrow不知何故不给我后退箭头。

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

4 个答案:

答案 0 :(得分:37)

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

我只有一个片段活动。当我从一个片段切换到另一个片段时,我在我的活动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)工作所必需的。否则它将无法正常工作。所有其他选项要么在某个时刻不显示“箭头”或隐藏“箭头”或“汉堡包”。

答案 1 :(得分:6)

像这样使用:

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

答案 2 :(得分:4)

这个让我困扰了一段时间,因为我知道有一个默认的图标被使用(从查看ActionBarDrawerToggle的来源),我希望它采用{{1}的颜色集}。令人惊讶的是,这两行的顺序对于实际显示向上箭头至关重要:

R.attr.colorControlNormal
在您的mDrawerToggle.setDrawerIndicatorEnabled(false); getSupportActionBar().setDisplayHomeAsUpEnabled(true); 上调用 setDrawerIndicatorEnabled之前,必须在ActionBarDrawerToggle 上调用{p> setDisplayHomeAsUpEnabled。必须调用这两行才能显示默认(有色)箭头。

答案 3 :(得分:1)

我也面临同样的问题(它显示的是< icon或菜单图标,但不是两者),最后发现了什么对我有用。

附加信息:我正在使用支持库25,所以它可能在这里起作用,因为我没有使用以前的库版本进行测试。我正在使用工具栏设置为操作栏,并使用其中包含工具栏参数的方法设置ActionDrawerToggle。我只是在Android M设备上测试了这个。

以下代码是我启用/禁用导航抽屉的方式(函数位于NavigationDrawer Fragment中)。

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();可以解决这个问题。现在两个图标都显示正确!

我希望这有助于某人!