Android齐刘海适配完全攻略

0
回复
232
查看
[复制链接]

1

主题

1

帖子

10

安币

初级码农

Rank: 1

发表于 2019-5-21 17:40:01 | 显示全部楼层 |阅读模式
如果对本篇文章感兴趣,请前往,原文地址:http://www.apkbus.com/blog-982260-80105.html

![齐刘海](//upload-images.jianshu.io/upload_images/1999609-24c2ebf7ad7afc36.jpeg)## 背景Apple 一直在引领设计的潮流,自从 iPhone X 发布之后,"刘海屏" 就一直存在争议。但用户体验的提升,越来越多的Android厂家逐渐开始在自家旗舰机上使用刘海屏,尤其是 Android P 发布之后,也从系统级支持凹槽屏幕设计。目前在国内比较常见的就是 OPPO x21 和 华为 P20。对于刘海屏,在享受其带来的视觉体验上的同事,我们也要对自家APP做相应的适配,才能最大化的利用刘海屏。- 在Android8.0,Google官方并未提供刘海屏的相关API,因此,对于8.0的系统,各厂家会对刘海屏做特殊适配- 在Android9.0,Google官方提供了DisplayCutout来支持刘海屏适配### 哪些页面需要单独适配就算是增加了刘海屏,你也可以发现,大部分都是“切割”的状态栏的区域,所以就面临了三种情况。- 有状态栏的页面,不会收到刘海屏的影响。- 全屏未适配刘海屏的页面,系统会对刘海屏区域进行切割,让整体 UI 页面做下移处理,避开刘海屏的显示。- 全屏已适配刘海屏的页面,可以兼容刘海屏,做到真正的全屏显示。>因此,目前我们需要做适配的页面只有**全屏无状态栏**的页面进行适配即可## 技术适配刘海屏### 概念说明为了方便讨论,此处引用小米官方文档引用的概念:![](//upload-images.jianshu.io/upload_images/1999609-cb464f92225b7586.png)### 1、基于Google提供的API进行适配在全屏模式下,我们需要有办法获取到刘海屏凹槽的高度,才可以做到设计和布局的时候,留出安全距离。虽然 Google 要求,刘海屏的凹槽,必须和刘海的高度保持一致,而刘海屏又被隐藏在状态栏了,所以有一个思路是直接获取状态栏的高度,来判断刘海之外,可布局的安全区域。不过 Android P 已经预留出了标准的测量 刘海屏凹槽 的API:```DisplayCutout```>此方案仅支持Android9.0及以上(API>=28)### 允许Window扩展到刘海区域Google官方支持三种刘海屏支持模式:- 默认模式(LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT)- 刘海区绘制模式( LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES)- 刘海区不绘制模式(LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER)如果开发者未作任何声明,则会按默认模式处理。以下将具体介绍这三种模式的表现。**默认模式**  - *(LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT)*为了在不影响操作的情况下,尽可能利用刘海屏的显示区域,有以下表现:非全屏(normal mode)全屏(fullscreen mode)竖屏(portrait mode)使用耳朵区禁用耳朵区横屏(landscape mode)禁用耳朵区禁用耳朵区注:所谓全屏(fullscreen mode),指隐藏状态栏(status bar),即通过 SYSTEM_UI_FLAG_FULLSCREEN 实现的效果。**刘海区绘制模式 ** - *( LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES)*如上所述,默认模式下某些场景会禁用耳朵区,那是因为这些场景下,系统无法判断