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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章