Android 沉浸式状态栏适配(兼容多机型)

适配状态栏百度千篇一律的判断机型,由于在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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章