从ICS ActionBar切换到Lollipop工具栏后,缺少导航图标

And*_*kov 13 android android-ui android-actionbar-compat android-5.0-lollipop android-toolbar

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

mDrawerToggle.setDrawerIndicatorEnabled(false);
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mDrawerList);
Run Code Online (Sandbox Code Playgroud)

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

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

小智 18

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

drawerToggle.setDrawerIndicatorEnabled(false);
drawerToggle.setHomeAsUpIndicator(getV7DrawerToggleDelegate().getThemeUpIndicator());
setSupportActionBar(toolbar);
Run Code Online (Sandbox Code Playgroud)

您的活动将收到每个onOptionsItemsSelected事件,即使您再次启用抽屉toogle 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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Nik*_*ski 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

至于弃用ActionBarActivity,你应该使用getDrawerToggleDelegate().getThemeUpIndicator ()

  • 它有助于显示箭头,但在点击时不会调用"onOptionsItemSelected".似乎问题在某个更深处...... (4认同)
  • 尝试再次替换工具栏.使用setSupportActionBar() (3认同)
  • 这有帮助,但这是我见过的最丑陋的黑客! (3认同)