//4.4及以上状态栏全透明实现(在onCreate的setContentView前)
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.LOLLIPOP) {//5.0及以上
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
}else if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.KITKAT) {//4.4到5.0
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
还有一种方式是给activity或者application设置theme,创建不同的values文件,也可以做到不同系统版本的适配。设置windowTranslucentStatus为true将将页面内容也填充顶部的状态栏区域。
(有虚拟按键的设备上(大部分华为))设置windowTranslucentNavigation为true将将页面内容也填充底部导航栏的区域,不介意使用。因为一般app都会有底部导航,会导致系统和应用导航重叠。
如果仅仅想扩展背景样式到系统栏下,在页面布局的根布局设置android:fitsSystemWindows="true"
使用指定theme这种方式的弊端是有部分相同Android系统版本但不同厂家rom的手机,打开app状态栏会出现不同,有的是全透有的是半透明。
最靠谱是用代码结合设置fitsSystemWindows来实现。
还有就是使用沉浸状态栏且又有侧滑关闭页面的转场动画时,遇到了二级页面不能将页面内容填充到状态栏的问题,可能是因为添加进出场动画会需要将activity的背景设置为透明,因为都是没有需求随便加在项目里试的所以没有继续寻找解决方案。