Android ActionBar返回箭头自定义配置的正确执行顺序是什么?
结论
第二种代码执行顺序是100%可以保证自定义样式生效的,第一种顺序存在小概率失效的场景。
原理说明
setDisplayHomeAsUpEnabled(true)这个方法的作用不光是控制返回箭头的显示/隐藏,在部分Android系统版本、Appcompat库版本下,当你首次调用这个方法将开关置为true时,系统会自动加载默认的返回箭头Drawable覆盖掉之前设置的自定义指示器,导致你之前的setHomeAsUpIndicator配置被冲掉。- 第二种顺序是先开启返回箭头显示,再主动替换成你修改了颜色的自定义Drawable,不会被系统默认逻辑覆盖,所有版本下都能稳定生效。
优化建议
如果要适配更低版本的Appcompat库,还可以加个判空处理,避免空指针崩溃:
if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_material); upArrow.setColorFilter(Color.parseColor("black"), PorterDuff.Mode.SRC_ATOP); getSupportActionBar().setHomeAsUpIndicator(upArrow); }
内容的提问来源于stack exchange,提问作者One ForAll
相关产品推荐
相关产品推荐

