沉浸式状态栏相关

//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的背景设置为透明,因为都是没有需求随便加在项目里试的所以没有继续寻找解决方案。

你可能感兴趣的:(沉浸式状态栏相关)