Androdi8.0以前系统刘海屏支持看着篇文章 今天主要讲下Android P(9.0)的刘海屏支持,先放代码。
/使内容出现在status bar后边,如果要使用全屏的话再加上View.SYSTEM_UI_FLAG_FULLSCREEN getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); //设置页面全屏显示 WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.layoutInDisplayCutoutMode = windowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; //设置页面延伸到刘海区显示 getWindow().setAttributes(lp);如果单纯百度一搜就能出来我就不会开贴记录了 问题来了如果你的编译版本大于等于28用以上代码是可以满足的。但是国内大部分渠道下到18上到28任何版本都有,如果用的是小于28的编译版本,我们代码库中没有"layoutInDisplayCutoutMode "这个类怎么办? 下面把我的处理代码发上来,用的反射处理的,结合上文链接和本文代码可以支持大部分刘海屏水滴屏。
if(Build.VERSION.SDK_INT >= 28) { WindowManager.LayoutParams lp = getWindow().getAttributes(); Class<WindowManager.LayoutParams> clz = WindowManager.LayoutParams.class; Field field = null; try { field = clz.getField("layoutInDisplayCutoutMode"); field.set(lp, 1); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } getWindow().setAttributes(lp); }