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

时间:2014-10-24 13:36:40

标签: android android-ui android-5.0-lollipop android-actionbar-compat android-toolbar

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

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

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

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

3 个答案:

答案 0 :(得分:18)

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

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

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

结束了
@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);
    }
}

答案 1 :(得分: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 ()

答案 2 :(得分: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