阅读 246

Android Q Labs| 折叠屏设备适配

从去年的下半年开始,我们看到Android的设备制造商们又打造出了一个新的类别:折叠屏手机。这种设备的屏幕利用了全新的柔性屏技术,可以真正的实现弯曲和折叠。

可折叠屏设备现状

简单的来说我们可以根据在折叠状态下柔性屏所处的位置,将目前市面上的折叠屏手机分为两大类别。

折叠手机分类

Fold in

首先是Fold in。

就是在折叠的时候,它的柔性屏是处于折叠的内部的,我们看到屏幕上的第一个图片,仔细看的话是在它的折叠的里面是能看到有显示的内容的。这种设备当它在折叠之后,它的外部是有一块额外的非柔性屏幕,这个屏幕就很适合用户做一些比较简单的,需要快速响应的操作。

Fold out

第二个类别叫Fold out。

当他在折叠的时候,它的柔性屏还是在折叠的外部的,它在折叠状态下,柔性屏是只有其中部分区域是继续使用的,它的部分区域也可以把它当成一个普通的折普通的显示屏来使用。

在去年11月份,我们举办了每年一度的 Android 开发者峰会,在开发者峰会上我们就宣布了 Android 系统会对折叠屏设备提供原生支持。这也就意味着如果你在开发应用的时候,遵循了我们推荐的最佳实践做法去实现你的应用,那么你的应用不需要做任何更改就能在这些新型的设备上运行起来。

我们这里所指的最佳实践就包括有说你的 Activity 是否能够根据当前屏幕大小去自己调整自己的大小,以及是否正确地处理了配置变化,还有当配置发生变化的时候,你是否能保存并恢复到用户之前所在的状态等等。

在这些新的折叠屏手机上,如果你想达到良好,甚至是极佳的用户体验,在设计和实现的时候,就有一些需要特别关注的地方。

使用折叠屏手机的体验

  1. 首先是在折叠屏手机被折叠的情况下,基本上你可以认为它跟一个普通的手机是差不多的使用体验,适合单手操操作适合,同时很方便你去做一些快速的响应,比如说接听电话回复消息等等。

  2. 当折叠屏手机展开的时候,它通常是一块有7到8英寸的大屏幕,使用起来的体验非常接近于平板设备。这么大的一块屏幕。针对于这样一个大屏幕,你的应用选择什么样的布局就非常重要,我们鼓励开发者在这利用好这么大的一个显示区域,不要利用当中的任何一个像素。

  3. 在展开的柔性大屏幕上,它相对于普通的手机屏幕也更适合进行分屏展示。 在使用50:50的分屏展示的情况下,它的使用体验就类似于将两个普通的手机并列放在一起的展示体验。

UX 考虑

我们看到有的折叠屏手机它可以同时支持三个应用,同时显示 Android 的开发者对于16:9和18:9的长宽比都已经很熟悉了。但是折叠屏手机的出现又带来了一些新的长屏幕长宽比。现在作为开发者也是时候去考虑一下你的应用在这些新出现的长宽比的屏幕上,它的展示效果是什么样的?新的长宽比可能是21:9,甚至更高更长的瘦长形的屏幕,也可能是接近长方,而接近正方形,也就是1:1长宽比的矮胖型的显示屏。 在展开状态下的折叠屏幕,我们希望大家能把对屏幕的使用用到极致。

当然我们也知道在某些特殊的情况下,作为应用的开发者,你可能需要去设置应用所可以支持的最大最小长宽比。那么在这种时候,你可以使用从 Android 8.0引入的 maxAspectRatio 去设置最大可支持长宽比。 也可以使用我们在AndroidQ上新加入的minAspectRatio去设置你所能支持的最小长宽比。

我们不仅是对开发者有一些要求,我们对于生产折叠屏设备的 OEM 也有一些明确的要求。 我们希望 OEM 可以保证在不同的设备,应用程序都能有足够的空间容纳底部导航栏中最多同时有五个图标同时显示,以及能有一个舒适的键盘输入区域。具体来说就是我们要求oem保证设备的最小触摸目标大小是两英寸。

应用联系性

什么是应用连续性呢?在可折叠设备上,当用户折叠或展开折叠屏幕的时候,应用就会被从一个屏幕自动切换到另一个屏幕上去展示。在切换发生的时候,系统会向应用发送 ConfigurationChange。 为了避免你的用户的体验因为应用屏幕的切换而受到影响,希望开发者能确保你的应用能够妥善的处理运行时的配置变更。

具体来说就是你需要特别去关注以下几个方面:

首先是为你的应用选择合适的布局

第二是要注意到要注意能恢复到之前用户所在的位置。比如说在切换前你的界面上它是带有滚动条的,那么在屏幕切换之后,刚刚用户滚动到哪里,你的应用最好还能保证滚动条处于切换前的同一个位置。

Multi-window

关于 resizeableActivity 属性,它是从 Android 7.0伴随着 multi—window 一起引入的。开发者可以在应用的 manifast 文件里面为 activity 和application 去设置属性。

这个属性表明的是 activity 和 application 是否能够启用或者禁用多窗口显示?如果这个属性的值设置为 true,表示 activity 能够以分屏和自由形状模式启动,如果属性设置为 false,并不是说你的 activity 就绝对不会被调整大小,实际上它表示的是 activity 它不能支持多窗口模式。如果这个值被设置为 false,且用户尝试在多窗口模式下去启动,那么 activity 就会被以全屏方式展示给用户,

对于那些既不能支持 multi-window,也不能支持屏幕旋转的应用,我们会通过兼容模式来进行展示。这里的兼容模式指的是将应用做拉伸之后,所有应用覆盖不到的区域会使用黑色部分填充,这种模式也叫做 black box 模式。

为了应用能有更好的用户体验,我们当然不希望开发者的应用被使用 black box 模式进行展示。我们建议开发者将 resizeableActivity 属性来设置为 true,并选择合适的应用布局,从而来在多窗口模式下有一个比较好的用户体验。

在折叠屏手机出现以前,其实 Multi-Window 的概念就已经被引入了。其中有一个现在的用户比较熟悉的状况,就是在手机上的分屏显示。如果你的设备是一个 O 或者 P 的设备的话,你相信你应该早已在你的设备上尝试过这种分屏模式。

在Android之前,虽然屏幕上可能同时会有多个 activity 显示,但是同一时间最多只可能会有一个 resume 状态。如果当前界面当前屏幕上有多个 activity 显示,那么实际上只有其中具有焦点的 activity,他才处于 resume 模式,而其他的应用虽然可见,但实际他们的状态都是属于处于 PAUSED 状态。虽然我们在开发者网站上的多窗口支持的文章里提供了处理同屏多应用的实现方法,但是我们发现绝大多数的应用开发者并没有根据我们的最佳实践推荐的方法来处理 onPAUSED 状态。

当多个应用程序都处于 resume 这种状态的时候,很明显对于一些系统的独占性资源,比如说摄像头和麦克风肯定不可能这多个应用都可以去同时访问,那么其中的一些应用程序就会失去对这些独占性系统资源的使用权。应用可以通过可用性变化的回调来处理这种情况。这里以摄像头为例。
我们还在 Android 里面为 Activity 添加了一个新的状态叫 topResumed。因为我们刚刚提到在 Q 之前的系统版本上,同一时间只会有一个 activity 处于 resume 这种状态。所以在 Q 上新增的 topResumed 这种状态下你可以认为它基本上是等同于在 Q 之前的版本上的 resume 状态的。
随着 multi-window的情况越来越常见,我们发现在之前的系统版本上一些不太可能出现的操作现在也变得可能了,比如说之前在手机操作上,通常不会有用户需要将一段文字或者是一个图片从一个应用里拖放到另一个应用里的情况。但是随着多窗口状态的出现,很可能用户就会有这种需求。如果你的应用恰巧是一个有可能出现这种用户场景的应用,那么我们建议你现在就应该可去考虑是否对你的应用增加对文本和图片的拖放处理。
我们具体来看一下 Activity 的切换。实际上有很多种方式可以把一个 Activity 从一个显示屏切换到另一个显示屏。以折叠手机为例来说,就是当用户折叠或者展开手机设备的时候,Activity 就可能在屏幕之间发生移动。在所有的安卓平台版本上,从启动器或者系统都可以定期启动,在辅助屏幕上创建一个新的 Activity 实例,或者他也可以从一个显示器中被移动到另外一个显示器中,这个行为是取决于在你的应用的安卓 menifast 里面定义的 Activity 的 launch mod 以及启动 Activity 的调用者设置的英特的标志和选项。

当 Activity 被移动到不同的显示设备的时候,你需要记住以下三种变更可能会发生。

在大多数情况下,开发者都会有预期说不同的显示器他们会有不同的尺寸密度和分辨率,那么这也意味着如果你的应用声明了他可以去处理运行时的配置变更,他就要能够对这些可能不同的配置都要去进行处理。
如果你声明你的 Activity 它的启动模式可以支持多个实例并存,那么当它在辅助屏幕上启动的时候,就会创建一个新的 Activity 体实例。这里演示的是调用者请求在第二个显示器,也就是手机连接的外置显示屏上使用 new task 和 multitask 这两个标志去启动一个新的 Activity,这里就会创建一个新的 chrome 窗口。
我们希望应用开发者能够去检查你的应用是否能支持这种多实力的状况,如果你确定可以支持,那么你还需要去考虑使用具有多个 view model 的共享数据源。 Multi-resume 就也适用于多屏幕的这个场景,并且多个 Activity 可能同时可以接受用户输入,你需要注意的一点是,即使在以前的平台版本当中处于未聚焦状态,Activity 可能可以接受输入。比如说当用户尝试同时在分屏模式中与两个应用进行交互的时候,就会发生这种状况。

如果你的应用希望去显示连接到当前的系统的额外的显示屏幕怎么办?第一部是通过使用 DisplayManager 去检查当前连接到当前系统中的所有显示内容。不同的显示器可能会具有不同的特征,你可以去调用接口去检查每一个显示设备的指标信息标志还有状态,并确认你是否需要去使用这些显示设备。

比如说当你希望去展示一个高清的照片的话,你就可以先做一个过滤,去挑选出那些屏幕尺寸比较大,resolution 比较高的那些屏幕来展示这个图片。当然还有一种情况就是你可以去判断当前的这些连上的显示设备是否关掉,因为关掉的情况下对你来说没有什么价值,所以你可以直接将他们过滤掉。

有的时候系统会限制某些屏幕上 Activity 被启动,这种情况下,如果你在这些设备上去启动 Activity 就会抛出一个 security assumption。在 Android Q 上我们还添加了一个新的 API 来检查当前的安全限制,是说这个屏幕是否允许调用者在它上面去启动一个 Activity 当然你也可以使用 Android O当中添加的 Activity option 在你所想要的显示设备上去启动你的 Activity。
在Android Q 上软件键盘窗口可以被显示,也可以被移动到辅助显示器当中。但是同一时 间系统仍然是只能有一个软件键盘窗口。在这个软件键盘窗口被移动到不同的显示器上的时候,处理方式与显示尺寸变更,比如说屏幕旋转的情况下的处理方式是类似的,系统会向键盘进程发送显示配置更改信息,并且在运行时更新上下文和可用资源。
从Android Q 开始辅助屏幕上也可以去支持桌面壁纸了!Android frame work 会为每一个显示屏创建一个单独的 WallpapeSrurvive.Engine 实例,并且会保证每个引擎的是表面都是独立绘制的。
如果你是一个壁纸的开发人员,你需要确保你使用正确的 display contacts 去加载资源,你还可以在 wallpaper info 的 xml 定义中去声明对多显示设备的支持。对于 Android Q 当中的启动器,我们为他在 intent 的过滤器添加一个新的类别,以便为辅助屏幕提供专用的 Activity,这个专用 Activity 的实例将用于支持 system decoration 的所有显示器,每个显示器都具有单独的一个。这个 Activity 必须具有支持多个实例的启动模式,而且需要可以适用不同适应不同的屏幕大小,用户可以去自主的设置他们。

Multi-display

在 AOSP 当中的 launchers 这个类就实现了专有 Activity 类别。那么我们在 AOSP 当中还有一个 multi-display 的启动器事例,展示了如何去使用新的功能。

如何测试

我们也知道对于开发者来说,在现在你想拥有一个真实的折叠屏手机设备去测试你的应用的表现还是挺难的。我们在 Android studio 当中也提供了一些方案,帮大家去处理这种情况。

如果你现在有 Android studio3.5,你可以在 AVD 当中去看到,我们现在提供了7.3英寸和八英寸的折叠屏设备的模拟器,如果今后我们看到有其他尺寸的折叠屏手机上市,我们也会在 AVD 里面增加相应的模拟器尺寸的选项。
通过这些模拟器,你现在就可以立即开始测试你的应用,在这些最新的折叠屏手机上的用户体验,你甚至可以去模拟折叠屏手机被折叠和打开的情况来测试你的应用程序的连续性。如果你的应用他声明了自己所能支持的最大或者最小长宽比,你现在还可以通过模拟器去看到在 lock box 模式下你的应用的呈现效果。当然你也可以通过模拟器去测试 multi-resume 这种状态下你的应用程序的表现。
为了帮助开发者能够在真实的设备上去测试 multi-display 的展示效果,在 Android Q 中我们还增添了一个新的开发者选项,叫强制使用桌面模式。 在这个选项被开启之后,它会在所有的辅助屏幕上显示 system decoration,比如说是系统顶部的状态栏和底部的虚拟导航栏,并且会在辅助显示屏幕上显示主鼠标指针。通过与启用可自由调整的可自由调整的窗口,这个选项的结合,它可以创建出类似于桌面的窗口体验。这两个开发者选项的变更通常是需要重新启动手机设备才会生效的。

开发者文档

我们还在开发者网站上有一个非常详细的教程来跟大家介绍,如何去适配这些折叠屏手机设备。大家可以通过扫描现在屏幕上的二维码去阅读教程,那么我们也希望大家能够尽快的实现你的应用与这些折叠屏手机的适配工作。

点击:开发者文档

Android Q Labs 直播专题页面

Android Q Labs 开场演讲

Android Q 有哪些更新

Android Q 现代化您的应用

后台 Activity 启动的限制

Android Q 分区存储

Android Q 手势导航

Jetpack 更新

通用系统映像介绍

Google Play 商店政策

Android Q 地理位置权限变更

Android Q 深色主题

Android Q Labs 总结演讲

关注下面的标签,发现更多相似文章
评论