刘海屏适配

非Android标准模式

全屏应用(内容延伸到StatusBar后面),获取状态栏高度,并在顶部添加适当的空白

fun Context.getStatusBarHeight(): Int {
    val resourceId = resources.getIdentifier("status_bar_height", "dimen", "android")
    return if (resourceId > 0) {
        resources.getDimensionPixelSize(resourceId)
    } else {
        resources.getDimensionPixelSize(R.dimen.default_status_bar_height)
    }
}

非全屏应用不需处理,不会被挡住

还有一些LJ厂商,状态栏高度跟刘海高度不一样的,网上搜索解决方案吧。。。

Android 9.0标准模式

不使用刘海区域

        val cutout = getDisplayCutout()
        if (cutout != null) {
            val lp = window.attributes
            lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
            window.attributes = lp
        }

使用刘海区域,然后设置应用全屏,并小心处理布局

        val cutout = getDisplayCutout()
        if (cutout != null) {
            val lp = window.attributes
            lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
            window.attributes = lp
        }

你可能感兴趣的:(刘海屏适配)