背景
项目想让整个app能够全部融到手机中,所以需要对状态栏和导航栏进行适配
参考
透明状态栏android
【Android】状态栏的适配-符合activity活动的主流颜色(附代码)
val lp = window.attributes
lp.flags = lp.flags or WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
window.attributes = lp
问题发现
在有些机型上是存在半透明的情况,例如华为的机子;但是在小米这里就很完美地展现。很迷。
改进代码实现
采用kotlin的扩展函数
import android.app.Activity
import android.graphics.Color
import android.view.View
import android.view.ViewTreeObserver
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
fun Activity.setTransparentStyle(view: View) {
window.statusBarColor = Color.TRANSPARENT
WindowCompat.setDecorFitsSystemWindows(window, false)
view.viewTreeObserver.addOnGlobalLayoutListener(object :
ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
view.viewTreeObserver.removeOnGlobalLayoutListener(this)
WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = true
view.setPadding(
0,
ViewCompat.getRootWindowInsets(window.decorView)?.getInsets(
WindowInsetsCompat.Type.statusBars()
)?.top ?: 0,
0,
ViewCompat.getRootWindowInsets(window.decorView)?.getInsets(
WindowInsetsCompat.Type.navigationBars()
)?.bottom ?: 0
)
}
})
}
在onCreate的时候调用上述代码即可