我有一个活动,其中包含许多使用操作栏和导航抽屉的片段。它启用了“home as up”。我已经实现了正确的逻辑,只有顶级片段显示动作栏抽屉切换图标,其他片段显示箭头。我通过以下方式实现了这一目标:
mDrawerToggle.setDrawerIndicatorEnabled(false);
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mDrawerList);
现在旧的v4支持库ActionBarDrawerToggle已弃用。我已经与新的Toolbar
一起切换到v7版本以获得Material Design外观。在抽屉打开后,“向上”箭头被正确显示,但是当执行上述代码时,它会完全消失。
这是支持库中的错误还是我必须做一些不同的事情来显示“向上”箭头而不是抽屉指示器?
答案 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