刘海屏适配
2018-11-29 本文已影响0人
乐此不痞
非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
}