13

我有一个包含许多片段的活动,这些片段使用操作栏和导航抽屉。它启用了“home as up”。我已经实现了正确的逻辑,只有顶级片段显示操作栏抽屉切换图标,其他片段显示箭头。我通过以下方式实现了这一目标:

mDrawerToggle.setDrawerIndicatorEnabled(false);
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mDrawerList);

现在旧的 v4 支持库 ActionBarDrawerToggle 已被弃用。我已经切换到 v7 版本以及 newToolbar以获得 Material Design 外观。之后,当抽屉打开时,“向上”箭头正确显示,但当执行上述代码时,它完全消失了。

它是支持库中的错误还是我必须做一些不同的事情来显示“向上”箭头而不是抽屉指示器?

4

3 回答 3

18

Nikola Despotoski 和 Andrey Novikov 的回答/评论是完全正确的,但我想提一下,在工具栏被以下代码替换后:

drawerToggle.setDrawerIndicatorEnabled(false);
drawerToggle.setHomeAsUpIndicator(getV7DrawerToggleDelegate().getThemeUpIndicator());
setSupportActionBar(toolbar);

即使您再次启用抽屉工具,您的活动也会收到每个 onOptionsItemsSelected 事件。drawerToggle.setDrawerIndicatorEnabled(true); 所以你需要处理这个,我已经结束了

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            if (drawerToggle.isDrawerIndicatorEnabled()) {
                return drawerToggle.onOptionsItemSelected(item);
            } else {
                onBackPressed();
                return true;
            }
        default:
            return super.onOptionsItemSelected(item);
    }
}
于 2014-11-14T14:34:46.380 回答
10

您是否尝试过getV7DrawerToggleDelegate().getThemeUpIndicator ()在禁用指标后使用并设置主题指标?

因为当指标被禁用时会ActionBarDrawerToggle尝试设置前一个指标。

ActionBarDrawerToggle来源:

public void setDrawerIndicatorEnabled(boolean enable) {
    if (enable != mDrawerIndicatorEnabled) {
        if (enable) {
            setActionBarUpIndicator((Drawable) mSlider,
                    mDrawerLayout.isDrawerOpen(GravityCompat.START) ?
                            mCloseDrawerContentDescRes : mOpenDrawerContentDescRes);
        } else {
            setActionBarUpIndicator(mHomeAsUpIndicator, 0);
        }
        mDrawerIndicatorEnabled = enable;
    }
}

编辑:

在弃用 时ActionBarActivity,您应该使用getDrawerToggleDelegate().getThemeUpIndicator ()

于 2014-10-24T15:52:53.743 回答
2

如果您使用 AppCompatActivity,您可以通过以下方式获取正确的抽屉图标和后退图标

        if(homeUp)
    {
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        mDrawerToggle.setDrawerIndicatorEnabled(false);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });

    }
    else
    {
        mDrawerToggle.setDrawerIndicatorEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        mDrawerToggle.syncState();
    }

无需 getV7DrawerToggleDelegate :D

于 2015-12-08T15:36:46.637 回答