智能手机正在快速地向全面屏和更大的宽高比发展。在这些设备上,齐刘海是一种比较流行的实现全面屏体验的方式,它在设备的正面为重要的传感器提供了一小块区域。目前,已经有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。这些可以让您检测内容是否与刘海重叠,并在您需要时重新定位。

对于运行在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没有适配长屏幕的分辨率,你可以选择声明一个最大的分辨率以在这些屏幕上请求信箱。

感谢您的阅读,我们希望这能帮助您为所有的用户提供一个愉快的体验,无论它们有什么样的屏幕显示。

android 齐刘海编程,[翻译]Android适配全面屏上的齐刘海相关推荐

  1. Android 浅谈适配全面屏、刘海屏、水滴屏

    对刘海屏.水滴屏做适配前,先在此给出一个基本概念:何谓刘海屏?何谓水滴屏? 上述两种屏幕都可以统称为刘海屏,不过对于右侧较小的刘海,业界一般称为水滴屏或美人尖. 目前国内流行的手机厂商主要有:vivo ...

  2. Android刘海屏、水滴屏全面屏适配

    现在,市面上的屏幕尺寸和全面屏方案五花八门.这里我使用了小米的图来说明: 上述两种屏幕都可以统称为刘海屏,不过对于右侧较小的刘海,业界一般称为水滴屏或美人尖.为便于说明,后文提到的「刘海屏」「刘海区」 ...

  3. Android刘海屏、水滴屏全面屏适配详解

    现在,市面上的屏幕尺寸和全面屏方案五花八门.这里我使用了小米的图来说明: 上述两种屏幕都可以统称为刘海屏,不过对于右侧较小的刘海,业界一般称为水滴屏或美人尖.为便于说明,后文提到的「刘海屏」「刘海区」 ...

  4. Android刘海屏、水滴屏全面屏适配。

    现在,市面上的屏幕尺寸和全面屏方案五花八门.这里我使用了小米的图来说明:上述两种屏幕都可以统称为刘海屏,不过对于右侧较小的刘海,业界一般称为水滴屏或美人尖.为便于说明,后文提到的「刘海屏」「刘海区」都 ...

  5. Java安卓适配全面屏_GitHub - chnagzhaolin/NotchScreenTool: Android刘海屏、水滴屏等全面屏适配工具...

    NotchScreenTool 适配刘海屏水滴屏等全面屏工具 具体的适配过程可以查看这篇博客: 安装 项目根目录的build.gradle中添加: allprojects { repositories ...

  6. Android适配全面屏

    Android适配全面屏 测试了很多方法,下面这个是我找到的可以用的 首先sdk的版本要在28及以上 然后使用代码 在setContentView之前插入代码 @Overrideprotected v ...

  7. 【Flutter】Flutter 全面屏适配 ( 需要适配的情况 | Android 设置最大宽高比 | 使用 SafeArea 进行全面屏适配 | 使用 MediaQuery 进行全面屏适配 )

    文章目录 一.Flutter 全面屏适配 二.全面屏适配的情况 三.全面屏适配方法 四.反面示例 ( 留海遮挡内容 ) 五.Android 中配置最大宽高比 六.使用 SafeArea 进行全面屏适配 ...

  8. Android适配全面屏(华为荣耀8,小米8,三星S8等)

    昨天公司一运营小伙拿着新买的小米8,问我,为啥项目在我手机上下面有一大块是黑色的,原来,测试机一般用都是1920*1080的,或者是更小的,(16:9)的屏幕,而他的小米8是2160*1080(18: ...

  9. Android 系统(156)----Android APP适配全面屏手机的技术要点

    为了更好的阅读体验,可以转到我的个人站点:Windy'Journal 目录 目录 关于全面屏 更大的屏幕高宽比例 在AndroidManifest.xml声明max_aspect值 更换部分被拉伸的图 ...

最新文章

  1. js中定义变量之②var let const的区别
  2. 软件测试随手记(转)
  3. Spark 1.2 Standalone Mode 单机安装
  4. 服务器实际显示内存,服务器实际显示内存大小
  5. mysql innodb myisam 混合,MySQL MyIsam/InnoDB混合在一起的事务
  6. InDesign 教程,如在使用的不同类型的框架?
  7. 简单链表实现增删改查(内部类+递归)
  8. Linux-设置静态IP地址
  9. 呼叫中心中间件(mod_cti基于FreeSWITCH)-排队(ACD 话务分配)
  10. 老男孩网络安全第八期
  11. python课程回顾复习记录简要6
  12. 【2019.8.9 慈溪模拟赛 T2】摘Galo(b)(树上背包)
  13. scrapy爬虫之凤凰网热点新闻
  14. 线上写入数据不成功,本地没问题的解决方法
  15. ipq806x sdk 编译方法
  16. android 图片保存电脑上,怎样简单快速的将手机里的照片和视频,批量保存到电脑?...
  17. Java Web项目中HTML文件中的汉字在浏览器中显示乱码的解决方案
  18. 输入220V输出5V-24V电流:200MA-500MA.非隔离高压IC
  19. 数据库安全性 完整性
  20. 时间服务器ntp配置文档,NTP 及时区配置

热门文章

  1. RAID不同模式之间的区别
  2. Linux的账号与权限管理
  3. Sql 双重否定的随笔
  4. 最小公倍数和最大公约数的三种算法
  5. 小白兔写话_看图写话小白兔
  6. direction: rtl;
  7. mongodb建索引遇到的一个错误解决办法
  8. DNS服务解析与原理笔记
  9. Linuxftp服务
  10. 时间都去哪了。。。。