適配狀態欄百度千篇一律的判斷機型,由於在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)