标题说明了一切。当我拨打mDrawerToggle.setDrawerIndicatorEnabled(false)
时,我不想再显示“hamburger
”图标,而是向后导航箭头。
不幸的是,当我调用此方法时,标题显示时没有向后箭头,也没有“汉堡包”图标。将drawerIndicatorEnabled
设置为真后再次显示“汉堡包”图标。
我设置getSupportActionBar().setDisplayHomeAsUpEnabled(true)
和getSupportActionBar().setDisplayShowHomeEnabled(true)
修改 基本上这里建议的解决方案:Change drawer icon back to back arrow不知何故不给我后退箭头。
有没有人知道这个问题的解决方案?非常感谢你!
答案 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();
可以解决这个问题。现在两个图标都显示正确!
我希望这有助于某人!