Google 官方提供了三种模式用于刘海屏(cutout)的适配:
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
刘海屏模式的修改针对Activity,在一个Activity中修改并不影响其他的Activity,修改方法:
protected void setLayoutInDisplayCutoutMode(int layoutInDisplayCutoutMode) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.layoutInDisplayCutoutMode = layoutInDisplayCutoutMode;
getWindow().setAttributes(lp);
}
}
三种模式下内容区域渲染:
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT:默认模式:
默认状态栏:纵屏不渲染到cutout区域,状态栏颜色;横屏不渲染到cutout区域,黑色
全屏:纵屏不渲染到cutout区域,黑色;横屏不渲染到cutout区域,黑色
沉浸式状态栏:纵屏渲染到cutout区域;横屏不渲染到cutout区域,黑色
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER 模式:
默认状态栏:纵屏不渲染到cutout区域,黑色;横屏不渲染到cutout区域,黑色
全屏:纵屏不渲染到cutout区域,黑色;横屏不渲染到cutout区域,黑色
沉浸式状态栏:纵屏不渲染到cutout区域,黑色;横屏不渲染到cutout区域,黑色
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 模式:
默认状态栏:纵屏不渲染到cutout区域,状态栏颜色;横屏:状态栏渲染到cutout区域,内容部分不渲染到cutout区域
全屏:纵屏渲染到cutout区域;横屏渲染到cutout区域
沉浸式状态栏:纵屏渲染到cutout区域;横屏渲染到cutout区域
国内手机厂商对Android P的适配方案
华为: http://mini.eastday.com/bdmip/180411011257629.html#
小米:https://dev.mi.com/console/doc/detail?pId=1351
vivo:https://dev.vivo.com.cn/documentCenter/doc/145
总之:以上品牌的手机按照google的Android P适配方案适配后就不会出现问题,如若有问题可以向厂商反馈