MIUI 9最近泄露的两份文档,关于分屏和画中画的,看看人家这需求文档写的,多多学习O(∩_∩)O哈!。
MIUI 「分屏」功能的适配建议
前言
从 7.0 开始,Android 加入了新的特性「Multi-Window」,以支持同时显示多个应用,根据不同场景及设备,细分为以下三种:
Split-Screen Mode: 「分屏」,用于手机和平板
Picture-in-Picture Mode: 「画中画」,用于电视端(Android N)及移动端(Android O)
Freeform Mode:「自由模式」,用于在更大尺寸的设备上自由缩放应用窗口
可以看到,「分屏」是 Multi-Window Mode 的其中一种,用于手机等移动设备。MIUI 将在下一个版本支持「分屏」,基于 Android 7.0 优化,因此开发者不用针对 MIUI 做重复的适配工作。
Android 分屏的表现
1. 默认将窗口一分为二,支持调整窗口大小
2. 支持横屏
3. 支持主应用始终在前台(不同厂商有不同处理,这里仅指 Android 7.0)
分屏对开发者的好处是?
如前所述,Android 7.0 的分屏允许某个应用始终可见,MIUI 会在这个基础上做更多的交互优化,以符合用户的预期。在这个背景下,分屏对于开发者来说有以下好处:
可能提升使用时长:由于应用始终可见,主流程不会被打断,有助于提升使用时长。
可能提升日均使用次数:使用分屏后,消费长内容(如长视频)的成本变低了,用户不用想着留一整段时间,也有助于提升使用次数。
随着 Android 7.0 的设备越来越多,支持分屏带来的好处将会被不断放大。加之 Android 有标准的分屏接口,大大减少了开发者的适配工作量。
如何支持分屏?
支持分屏的方式非常简单,只需要声明一个属性。从 7.0 开始,Android 新增了一个 Activity 属性: resizeableActivity
,以声明该 Activity 是否支持多窗口显示。
android:resizeableActivity=["true" | "false"]
如果这个属性设为 true
,Activity 就可以在分屏模式下显示;设为 false
,Activity 则不会在分屏模式下显示,而是会占满整个屏幕。因此开发者可以根据具体场景,仅让部分 Activity 支持分屏。
若开发者没有为 Activity 声明该属性,Android 会根据应用的 targetSDKVersion 及 Activity 的 screenOrientation
属性来综合判断是否可以在分屏显示。关于判断的详细逻辑,可以参考官方文档Configuring Your App for Multi-Window Mode 或者这篇更详细的博客 Android N7.0多窗口适配开发指导 。
如何进一步优化分屏模式?
配置 resizeableActivity 的属性,是适配分屏的最简单方式,但如果想要提供更好的使用体验,需要开发者做一定优化工作。下面是我们了解到的一些案例(测试机型:Nexus 6 Andriod 7.1),开发者可以根据自己的业务需求,做不同程度的优化。
1. 减少不可滑动的页面/控件
在分屏过程中,屏幕高度只有原来的一半,如果有太多的控件不响应滑动事件,那么用户将无法上下滚动应用页面,甚至无法进行下一步操作(如案例1)。这类页面,最常见于Splash screen、登录注册页、音乐播放页、大图区域、弹窗等。
由于用户可以自由调整分屏的窗口比例,因此开发者只要减少了不可滑动的控件,分屏的可用性就会大大提高,是性价比非常高的优化方案。
案例1.1:Faceobook 登录页不可下滑
案例1.2:Faceobook Messenger 登录页可下滑
案例1.3:爱奇艺跟据窗口缩放Splash Screen
案例1.4:Google Keep根据窗口调整布局
一种更好的实现方式,根据当前窗口调整布局。
2. 尽可能使用相对位置,以兼容多种窗口尺寸
分屏时,屏幕的高度和宽度会发生变化,因此在书写控件布局时,尽量使用相对位置,以避免窗口大小改变时,控件无法显示或显示不全(如案例2.1)。这也是一种性价比很高的优化方案,可以保证用户在分屏时能正常使用应用。
案例2.1:美团外卖弹窗未居中
案例2.2:滴滴弹窗居中
3. 注意多窗口下 Activity 的生命周期
视频、直播等类别的应用需要特别关注这一点。Android 7.0 在分屏时会同时运行两个应用,其中用户最后操作的那个应用会处于 Resumed 状态,另一个则会处于 Paused 状态。
这会带来一些问题,以视频应用为例,如果开发者在 onPaused 中处理视频的 「暂停/播放」,那在分屏时,就会因为用户操作另一个应用,导致视频停止播放(如案例3.1)。因此我们建议开发者在 onStart/onStop 中处理视频的「暂停/播放」,或者特殊处理分屏时的 Paused 状态。详见官方文档 Multi-Window Lifecycle。
案例3.1:优酷失焦点后暂停播放
案例3.2:bilibili失焦点后不暂停播放
4. 处理 Configuration Changes
由于分屏过程中,允许用户调整窗口的大小,这就会导致 Configuration 的改变。Android 的默认处理方式是 relaunch 整个 Activity,从而出现页面闪一下的问题。如果想避免闪一下的问题,建议开发者自己处理 Configuration 的变化。
案例4.1:Activity relaunch 的例子
5. 给内容更多空间
分屏后,屏幕空间变得非常小了,为了给内容让出更多空间,应尽量减少常驻控件。一种解决办法是在浏览内容时,隐藏底部tab等常驻控件,用户回滚时再出现(如案例4.1),以展示更多的内容。
案例5.1:知乎滚动时隐藏搜索框和底部tab
6. 为分屏定制新的布局(动态布局)
动态布局指根据当前的窗口大小,重新调整页面的布局。这是一项锦上添花的优化项,开发者可以酌情考虑是否添加此优化。以下是 Chrome 和 Youtube 的案例,供各位开发者参考。
案例6.1:Chrome 动态布局
案例6.2:Youtube 动态布局
结语(Q&A)
1. MIUI 分屏支持哪些设备?
搭载 Android 7.0 或以上的 MIUI 手机及平板设备均支持分屏。MIUI 也将尝试将分屏移植至 Android 6.0。因此将有数千万的新老设备支持分屏。
2. 如何调试?
MIUI 的分屏方案完全兼容 Android 7.0,因此可以在任意运行 Android 7.x 的设备上调试,无需为 MIUI 作特别处理。同时,以上提到的案例均能在任意 Android 7.x 设备复现。调试过程中,建议开启以下设置项:「开发者选项 > 强制将活动设为可调整大小」,然后重启手机,之后系统就会强制应用进入分屏模式,以方便开发者观察应用在分屏时的表现。
3. 分屏是个伪需求吗?用户为什么需要分屏?
分屏不仅不是伪需求,而且会是一个大众需求。我们认为分屏最主流的使用场景是:一边看视频,一边做其它事情。用手机看视频,已经成为用户的主流场景,各大视频应用的日活人数、使用次数、使用时长都可以佐证这个观点。但使用手机看视频有很多痛点,比如会被 IM 消息打断、切换至后台视频会暂停等。这些痛点都可以通过分屏较好地解决,这也是分屏能成为大众需求的潜力。
但不可否认的是,分屏也会带来很多可用性问题,尽管系统已经做了很多优化工作,仍然需要各大开发者做进一步的优化,提高分屏模式的可用性。因此非常希望各位开发者能够支持该功能,为广大用户提供更好的使用体验。再次感谢所有开发者的支持与付出!
4. 参考资料
官方文档:Multi-Window Support
CSDN博客:Android N7.0多窗口适配开发指导
Google 工程师关于开发多窗口应用的 5 点建议
MIUI 「画中画」功能的适配建议
前言
从 7.0 开始,Android 加入了新的特性「Multi-Window」,以支持同时显示多个应用,根据不同场景及设备,细分为以下三种:
Split-Screen Mode: 「分屏」,用于手机和平板
Picture-in-Picture Mode: 「画中画」,用于电视端。Android O 开始适用于所有 Android 设备
Freeform Mode:「自由模式」,用于在更大尺寸的设备上自由缩放应用窗口
「画中画」是 Multi-Window Mode 的其中一种,在 Android N 用于电视端,Android O 已将其移植到手机端。 MIUI 也将在下一个版本支持「画中画」的能力。下文将详细介绍这种能力,以及开发者该怎么使用这个特性。
什么是「画中画」
对于开发者而言,「画中画」可以理解为是系统开辟的特殊窗口,允许开发者在上面展示特定的内容和布局。Android 自 7.0 开始,在其 TV 端引入了 Picture-in-Picture Mode,即我们说的「画中画」。MIUI 将这个功能移植至手机端,并在其基础上做了一定修改,以支持更丰富的功能。下面是 MIUI 「画中画」的特性:
1.窗口始终悬浮在最上面(含桌面及其它应用)
2.支持滑动改变位置
用户单指滑动即可改变悬浮窗位置,也允许将其拖动至画面之外,同时不影响视频的播放。
3.支持点击暂停/播放
MIUI 允许「画中画」中的 Activity 接收点击事件,但不允许接收滑动事件。
基于以上提到的特性,理论上所有轻度交互的强展示类内容,均可以使用画中画的功能,视频播放则是其中最典型的代表。另外,Android O 中还加入了一个新的对象 PictureInPictureArgs
,支持定义悬浮窗的属性,如指定宽高比等。MIUI 暂不支持类似功能, 若开发者有相关需求,请及时反馈给我们。
「画中画」对开发者的好处
影视剧、体育直播、娱乐直播、短视频等内容,已经成为用户最重要的消费内容。但受限于目前手机系统的限制,用户无法做到一边看视频,一边聊天、购物。画中画有着强烈的用户需求,但各开发者可能受限于工程实现难度、各手机系统的限制等种种因素,无法很好地满足用户的需求。
现在开发者借助系统的接口,就能轻松实现画中画的能力,同时兼顾稳定性和灵活性。MIUI 诚邀各大开发者利用该特性,为用户提供更好的使用体验。
如何支持「画中画」
1. 声明Activity的属性:
与分屏一样,画中画也是针对 Activity 的,因此第一件事情是声明 Activity 的属性,需要将以下属性均设为 true
才能进入「画中画」:
android:resizeableActivity="true"
2. 增加调起入口
用户需要一个显性的入口使 Activity 进入画中画,因此开发者需要在应用界面增加一个控件,并在用户点击时调用 enterPictureInPictureMode()
,下图是 Android 提供的一个示例:
3. 处理UI控件
不同于原生 Android,MIUI 的「画中画」允许 Activity 接收点击事件,因此我们建议开发者在画中画模式中,保留重要的操作,如视频的暂停/播放(系统会提供关闭悬浮窗的控件,开发者无需重复添加)。又因为画中画的窗口会比平时的小,所以建议缩小控件或者隐藏某些控件。对于视频应用而言,还需要考虑缩小视频的水印(如爱奇艺、优酷在视频右上角添加的品牌水印)。
案例3.1:建议缩小或减少控件
4. 处理视频的播放
与分屏类似,「画中画」模式的 Activity 会处于 Paused 状态,因此 Android 建议开发者在 onStart / onStop 中处理视频的「暂停/播放」,或者特殊处理「画中画」时的 Paused 状态(调用isInPictureInPictureMode()
判断是否在「画中画」)。由于暂无适配「画中画」的应用,下面举两个分屏的案例以供参考:
案例4.1:优酷失焦点后暂停播放
案例4.2:Bilibili 失焦点后不暂停播放
5. 其它细节
Configuration Changes:与分屏类似,进入「画中画」时,可能会引起 Configuration Changes,因此 Android 建议开发者处理好相关变化,以避免在进入/退出画中画模式时,Activity 被系统 relaunch。
Audio Focus:由于悬浮窗的声音有可能与其它应用冲突,也建议开发者处理好相关变化
结语(Q&A)
1. 「画中画」和「分屏」的区别
「分屏」:将屏幕一分为二,互不遮挡,两个应用都可交互。
「画中画」:始终悬浮,大面积遮挡另一个应用,同时悬浮窗的交互受限。
两种模式所适用的场景不尽相同,开发者可以根据需求做选择。
2. 「画中画」:MIUI 与 Android O 的区别
MIUI 及 Android O 的「画中画」均基于 Android N 的接口,因此实现上是一致的,但在 UI 层有差异,下面是 MIUI 与 Android O Preview 的差别(Android O 正式版可能会不同):
悬浮窗大小:MIUI 固定为 213dp * 120dp,Android O 固定为 140dp 宽(高根据屏幕比例变);均不支持开发者自定义大小
悬浮窗宽高比:MIUI 暂固定为16:9,Android O 允许开发者自定义
是否支持点击事件:MIUI 允许悬浮窗接收点击事件,Android O 不允许悬浮窗接收任何事件
是否支持移动悬浮窗:均支持拖拽移动位置
PictureInPictureArgs
对象:Android O 新增的对象,MIUI 无此对象
对于直播应用来说,可能会希望将其设置为竖屏悬浮,但由于 MIUI 无法判定该内容的比例,因此默认设为横屏16:9。若开发者有定制的需求,欢迎随时向 MIUI 团队反馈,我们会尽快加上相关参数,以支持修改悬浮窗朝向。
3. 「画中画」与 悬浮 Window 的差别
如果是实现视频悬浮的效果,开发者可以通过 「画中画」和「悬浮window」两种方式来实现。对于开发者来说,「画中画」的实现方式有如下优势:
「画中画」是系统标准接口,这会比开发者自己实现的「悬浮window」更加稳定,开发量更小,同时后期维护及适配成本更小。
「画中画」与「悬浮window」均支持开发者定义窗口内的 UI 布局
「悬浮 window」并不是 Android 鼓励的方式,各大厂商正逐渐收紧相关权限。而「画中画」不存在该问题。
虽然目前支持「画中画」接口的设备还很少,但这是 Android 标准的接口,相信很快国内其它 ROM 也将支持,并逐渐成为大屏手机的标配功能。
4. 如何调试「画中画」
Android O 已经将 Picture-in-Picture mode 移植至手机端,MIUI 的画中画兼容该接口,因此开发者可以直接在 Android O 上调试该功能,但值得注意的是,MIUI 无法识别新的PictureInPictureArgs
对象。如果在适配过程中遇到任务问题,请随时联系 MIUI 团队。
5. MIUI 的「画中画」支持哪些设备?
搭载 Android 7.0 或以上版本的 MIUI 设备。
6. 参考资料
官方文档:Adding Picture-in-picture
官方文档:Android O PIP
Android N: Introducing Picture-in-Picture for Android TV(内含Github项目)
来源:万能君的软件库
声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!