原文链接: https://android-developers.googleblog.com/2018/07/supporting-display-cutouts-on-edge-to.html
智能手机正在快速地向全面屏和更大的宽高比发展。在这些设备上,齐刘海是一种比较流行的实现全面屏体验的方式,它在设备的正面为重要的传感器提供了一小块区域。目前,已经有11家设备制造商发布了16种带有齐刘海的设备,其中包括一些Android P公测设备,不久还会有更多这种设备出现。
这些引人注目的显示方式,为您展示您的App,提供了好时机。这也意味着比以前任何时候更重要的是,确保您的App在有一个或两个刘海的设备,以及18:9和更大宽高比的设备上,提供始终如一的出色体验。
使您的App与齐刘海设备兼容
随着齐刘海设备越来越多,您应该做些什么来确保App做好了齐刘海设备的兼容呢?
好消息是,在大多数情况下,您的App即使在有齐刘海的设备上也应该按预期正常运行。默认在没有设置特殊标志的竖屏情况下,状态栏将被缩放到和齐刘海一样的高度,app内容将显示在刘海下面的窗口中。在横屏或全屏模式,您的App窗口将会变成信封形状,以便您的所有内容不会都显示在刘海区域。
然而,在齐刘海设备上,您的App在一些区域的显示可能存在问题。
- 状态栏的高度以任何形式的硬编码来获取,都要小心。这很可能引起问题。如果可能的话,请使用WindowInsetsCompat来获取状态栏的高度。
- 全屏模式下,要仔细考虑何时使用窗口和屏幕坐标,因为您的App在信箱状态下不会占用整个屏幕。举个例子,如果使用 MotionEvent.getRawX/Y() 为触屏动作获取屏幕坐标,必须确保使用getLocationOnScreen()把屏幕坐标转换成视图坐标。
- 要特别注意进入和退出全屏模式。
利用刘海区域
在刘海区域显示您的App内容,是一种很好的方式,来给用户提供身临其境,全屏幕体验,特别是像视频,图片,地图和游戏。
在Android P版本,我们增加了API,让您方便管理App使用刘海的方式,以及检测刘海区域是否存在并获得他们的位置。
您可以使用layoutInDisplayCutoutMode(一种新的窗口布局模式),来控制内容相对于刘海区域的显示。默认情况下,如果刘海完全包含在系统栏里,App的窗口是可以延伸到刘海区域的。否则,窗口布局不能与刘海区域重叠。也可以通过 layoutInDisplayCutoutMode来设置内容是一直还是从不显示在刘海区域。如果你想利用完整显示,并不介意一些内容被刘海遮盖,使用SHORT_EDGES 模式设置内容一直显示在刘海区域是一种很好的选择。
如果要显示到刘海区域,可以使用getDisplayCutout() 来检索具有刘海安全插入和边界框的DisplayCutout。这些可以让您检测内容是否与刘海重叠,并在您需要时重新定位。
<style name="ActivityTheme"> <item name="android:windowLayoutInDisplayCutoutMode"> default/shortEdges/never </item></style>
对于运行在Android8.1(API 27)的设备,我们反向移植了 layoutInDisplayCutoutMode 活动主题属性,以便您可以控制刘海区域内容的显示。请注意,对运行在Android8.1或更低版本的设备的支持取决于设备制造商。
为了更方便地跨API级别管理刘海的实现,我们在AndroidX library中增加了DisplayCutoutCompat,现在可以通过SDK管理器获得。
有关刘海显示的更多信息,请查看文档。
使用刘海测试您的app
我们强烈建议测试您的app在所有的屏幕和体验上的兼容性,确保它们都能在齐刘海设备上运行良好。我们建议使用其中一款刘海的Android P Beta设备,例如Essential PH-1。
如果您没有设备,您还可以使用运行Android P或者Android模拟器的任何设备上使用模拟刘海进行测试。这可以帮助你发现您的应用可能会在具有刘海的设备上遇到的任何问题,无论是Android8.1还是Android P。
在具有齐刘海的设备上会发生什么?
Android P引入了对齐刘海的官方平台支持,您可以使用相关的API在齐刘海的内部或外部显示您的内容。为了确保一致性和App的兼容性,我们正在和设备制造商合作伙伴合作来满足一些需求。
首先,设备必须确保它们的齐刘海不会对App产生消极的影响。有两点要特别注意:
- 在竖屏状态,没有设置特殊标识,状态栏必须至少延伸到刘海的高度。
- 在全屏或横屏状态,整个刘海区域应该收起。
其次,设备应该有且仅有一个刘海在设备的每一个短边。这意味着:
- 您将不会看到在一边有多个刘海,或者说在一台设备上有多个刘海。
- 您将不会看到在设备左边或右边的长边有刘海。
在这些限制条件下,设备可以在任何地方放置刘海。
特殊模式
一些运行Android 8.1(API level 27)或者更早版本系统的设备,可选择支持“特殊模式”,允许用户将带信封样式的全屏或横屏App延伸到刘海区域。这些设备一般通过导航栏的切换提供这种模式,然后延伸屏幕前弹出一个确认框。
如果App支持,提供“特殊模式”的设备允许设备选择性地延伸App到刘海区域。
如果您的App的目标SDK版本是27或着更高,您可以设置 layoutInDisplayCutoutMode界面主题属性,以便在需要时推出特殊模式。
请不要忘记:更大的宽高比!
当您在做刘海支持时,也是确保您的App在18:9或者更大宽高比的设备上运行良好的好时机,特别是这些设备越来越普遍并且可以显示刘海。
我们非常鼓励您支持灵活的宽高比,这样您的App就可以利用整个显示区域,无论它在哪种设备上。您应该在不同的分辨率上测试您的App,确保它运行正常并且看起来美观。
以下是有关屏幕适配的一些指南,在您开发时请记住这些指南,另外请参考我们之前发表的更大宽高比的文章,以获得有关优化的建议。如果您的App没有适配长屏幕的分辨率,你可以选择声明一个最大的分辨率以在这些屏幕上请求信箱。
感谢您的阅读,我们希望这能帮助您为所有的用户提供一个愉快的体验,无论它们有什么样的屏幕显示。
网友评论