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

推荐:

  • android 兼容所有刘海屏的方案大全
  • android 兼容huawei手机刘海屏解决方案
  • android 兼容vivo手机刘海屏解决方案
  • android兼容oppo手机刘海屏解决方案
  • android兼容小米xiaomi刘海屏解决方案
  • android 关于google刘海屏的解决方案
  • ios兼容iphonex刘海屏解决方案

目录:

  • 刘海屏问题
    • Google 解决方案Android P
  • 其它厂商解决方案
    • 小米官方提供的解决方案
    • 华为官方提供的解决方案
    • vivo官方提供的解决方案
    • oppo官方提供的解决方案
    • 其它手机厂商

刘海屏问题

首先需要使用模拟器测试,最近 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”,开启刘海屏的支持,需要注意它们的区别,因为刘海屏是有多个版本的。

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

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

Google官方提供了三种模式:

1.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT2.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES3.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群投稿。

更多相关文章

  1. Android(Lollipop/5.0) Material Design(八) 保持兼容性
  2. Android(安卓)应用Theme
  3. Android:Material Design(七) 兼容性
  4. Kafka Consumer消费能力较低时的解决方案
  5. 1.仿小米商城 2.预习js变量与基本数据类型
  6. VSCode 中,TS 提示 ”无法找到 *.vue 声明文件“ 的解决方案
  7. 还在死磕 Ajax?那可就 out 了!
  8. 为什么邮件会进垃圾邮箱?各问题完全解决方案
  9. 商品出售信息表

随机推荐

  1. android 通过lint以及android-resource-r
  2. Android内核开发:在源码树中添加新的app应
  3. Android进程管理机制及优化 for HTC HeRO
  4. 谈谈新窜起的新操作系统平台 - Android平
  5. Android setting中添加桌面循环滑动选项
  6. Android 仿今日头条频道管理(下)(GridView之
  7. 全能HOOK框架 JNI NATIVE JAVA ART DALVI
  8. Android学习记录(6)—将java中的多线程下载
  9. 尝试用Android获取IMEI,折腾的一天,结果只
  10. Android表格布局之设置边框