android 关于google刘海屏的解决方案

转载请标明出处:
https://blog.csdn.net/DJY1992/article/details/80689308
本文出自:【奥特曼超人的博客】

推荐:

目录:

刘海屏问题

首先需要使用模拟器测试,最近 Google 也发布了 Android P 的模拟器,也可以找些真机云测的平台,但是需要一点点费用,自己买一台也是可以的,毕竟都是安卓开发。

首先考虑的是如何兼容各大厂商的问题,首先归总下:

  1. 谷歌google
  2. 小米xiaomi
  3. 华为huawei
  4. vivo
  5. oppo

Google 解决方案Android P

首先需要把SDK更新到Android P preview版本,然后使用 Android P 提供的模拟器,在开发者选项里找到 “Simulate a display with a cutout”,开启刘海屏的支持,需要注意它们的区别,因为刘海屏是有多个版本的。
刘海屏解决方案djy1992

注意,尾部都是带有cutout的,很多人不知道为什么,后面会讲解。

有了模拟器,接下来就解决代码问题了:

Google官方提供了三种模式:

1.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
2.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
3.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER

官方对应的解释:

  1. 仅仅当系统提供的bar完全包含了刘海区时才允许window扩展到刘海区,否则window不会和刘海区重叠
  2. 允许window扩展到刘海区
  3. 不允许window扩展到刘海区

老码农看到LAYOUT的时候应该可以想到它应该是属于哪里的了,没错,就是属于WindowManager的,老家伙出场,WindowManager的类型:WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER

WindowManager.LayoutParams windowManagerDu = getWindow().getAttributes();  
windowManagerDu.layoutInDisplayCutoutMode=WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;  
getWindow().setAttributes(windowManagerDu );

之前很多人问为什么开发者模式都是cutout,其实就是cut的边缘体,也就是layoutInDisplayCutoutMode,如果带状态栏的话需要判断DisplayCutout

DisplayCutout cutoutMode = getDisplayCutout();
if(cutoutMode != null){
    WindowManager.LayoutParams windowManagerDu = getWindow().getAttributes();  
    windowManagerDu.layoutInDisplayCutoutMode=WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;  
    getWindow().setAttributes(windowManagerDu );
}

这样就设置了是否允许window扩展到刘海区的代码,厂商的兼容度都是不一样的,因为都是在谷歌出解决方案之前出的刘海屏,所以版本上的兼容要统一估计也没那么快。


其它厂商解决方案

小米官方提供的解决方案

目前已上市的小米 Notch 设备(俗称刘海屏手机):小米8、小米8 SE、小米8 透明探索版
由于内容较多,详细请见另外篇:android兼容小米xiaomi刘海屏解决方案

华为官方提供的解决方案

由于内容较多,详细请见另外篇:android 兼容huawei手机刘海屏解决方案

vivo官方提供的解决方案

由于内容较多,详细请见另外篇:android 兼容vivo手机刘海屏解决方案

oppo官方提供的解决方案

由于内容较多,详细请见另外篇:android兼容oppo手机刘海屏解决方案

其它手机厂商

暂时没有发现,欢迎同学们多多投稿,也可加Q群投稿。

猜你喜欢

转载自blog.csdn.net/djy1992/article/details/80689308