适配状态栏百度千篇一律的判断机型,由于在RN开发时设置状态栏也就一句代码的事,我翻了以下android的文档,分享一下我在项目中如何适配状态栏
状态栏适配,实则是完成以下操作:
1.状态栏透明,布局直接从屏幕顶部开始,布局顶部加padding即可
2.状态栏背景白色时,字体变成黑色,反之则设为白色
3.android6.0之前不提供修改状态栏字体颜色的方法,所以我采用给它设一个半透明黑色背景,突显出白色字体,类似与播放器的白色按钮一样,背景是半透明的黑色
4.有些界面需要隐藏状态栏(如:视频播放页等)
效果图:
一般页面适配
白色背景适配
6.0以下适配效果
下面贴出代码,正常的activity只需要复制对应代码调用即可,封装在baseactivty或者封装成工具类都可以。
如果是单Activity多Fragment项目,可以借助navigation在NavController.setDestinationChangedListener中的addOnDestinationChangedListener接口中,判断当前显示的fragment,做出对应适配操作即可
在需要适配的activity中,加入以下方法:
fun changeStatusBarTransparent(activity: Activity) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return
}
val window = activity.window
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
val option = window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
window.decorView.systemUiVisibility = option
//6.0以上系统支持修改状态栏字体颜色,6.0以下不支持的设为黑色透明背景,突显白色字体
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
window.statusBarColor = Color.parseColor("#00000000")
}else{
window.statusBarColor = Color.parseColor("#20000000")
}
} else {
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
}
}
设置状态栏字体颜色代码:
设置为黑色字体
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
changeStatusBarTransparent(this)
设置为白色字体
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
changeStatusBarTransparent(this)
隐藏和显示状态代码:
隐藏
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
显示
window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)