升级至SDK 26/27后所有Activity状态栏始终呈灰色求助
我之前也碰到过一模一样的情况!升级到Target SDK 27后,只有带导航抽屉的MainActivity状态栏能正常显示主色调的半透明效果,其他Activity全变成灰色——明明没碰过主题样式,折腾了好半天才找到问题根源,给你几个可行的排查和解决方向:
检查所有Activity的主题继承一致性
虽然你说没修改样式,但导航抽屉相关的AppCompat库会自动给宿主Activity的主题添加状态栏适配逻辑。你可以去AndroidManifest.xml里确认下:是不是其他Activity的主题和MainActivity不一样?比如MainActivity用了Theme.AppCompat.Light.NoActionBar,而其他Activity不小心用了默认的Theme.Material.Light?SDK 26+的Material主题默认状态栏颜色就是偏灰的,把所有Activity的主题统一改成你MainActivity用的AppCompat主题试试。显式设置状态栏颜色
如果主题统一后还是有问题,直接在代码里给每个非MainActivity设置状态栏颜色就行,不用改样式。在Activity的onCreate()方法里加一行:getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.colorPrimaryDark));要是想让状态栏也像MainActivity那样半透明,再加一句开启透明状态栏的代码:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);不过加了透明状态栏后,记得给根布局加上
android:fitsSystemWindows="true",不然布局会顶到状态栏下面。检查根布局的
fitsSystemWindows属性
MainActivity的DrawerLayout默认会设置fitsSystemWindows="true",这个属性会告诉系统让布局适配状态栏区域,从而正确应用colorPrimaryDark。你可以看看其他Activity的根布局有没有加这个属性,没加的话补上试试——有时候就是这个小细节导致状态栏颜色不生效。确认
colors.xml里的颜色值
虽然MainActivity正常,但还是确认下colorPrimaryDark是不是你想要的颜色,有没有在升级SDK的时候不小心被IDE自动修改了?毕竟有时候Android Studio更新会悄悄改一些配置文件。
希望这些方法能帮你解决问题!
内容的提问来源于stack exchange,提问作者JPM

