MIUI 9 新功能提前看看吧

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. 默认将窗口一分为二,支持调整窗口大小

    MIUI 9 新功能提前看看吧

    2. 支持横屏

    MIUI 9 新功能提前看看吧

    3. 支持主应用始终在前台(不同厂商有不同处理,这里仅指 Android 7.0)

    MIUI 9 新功能提前看看吧

    分屏对开发者的好处是?

    如前所述,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 登录页不可下滑

    MIUI 9 新功能提前看看吧

    案例1.2:Faceobook Messenger 登录页可下滑

    MIUI 9 新功能提前看看吧

    案例1.3:爱奇艺跟据窗口缩放Splash Screen

    MIUI 9 新功能提前看看吧

    案例1.4:Google Keep根据窗口调整布局

    一种更好的实现方式,根据当前窗口调整布局。

    MIUI 9 新功能提前看看吧

    2. 尽可能使用相对位置,以兼容多种窗口尺寸

    分屏时,屏幕的高度和宽度会发生变化,因此在书写控件布局时,尽量使用相对位置,以避免窗口大小改变时,控件无法显示或显示不全(如案例2.1)。这也是一种性价比很高的优化方案,可以保证用户在分屏时能正常使用应用。

    案例2.1:美团外卖弹窗未居中

    MIUI 9 新功能提前看看吧

    案例2.2:滴滴弹窗居中

    MIUI 9 新功能提前看看吧

    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.窗口始终悬浮在最上面(含桌面及其它应用)

    MIUI 9 新功能提前看看吧

    2.支持滑动改变位置

    用户单指滑动即可改变悬浮窗位置,也允许将其拖动至画面之外,同时不影响视频的播放。

    MIUI 9 新功能提前看看吧

    3.支持点击暂停/播放

    MIUI 允许「画中画」中的 Activity 接收点击事件,但不允许接收滑动事件。

    基于以上提到的特性,理论上所有轻度交互的强展示类内容,均可以使用画中画的功能,视频播放则是其中最典型的代表。另外,Android O 中还加入了一个新的对象 PictureInPictureArgs,支持定义悬浮窗的属性,如指定宽高比等。MIUI 暂不支持类似功能, 若开发者有相关需求,请及时反馈给我们。

    「画中画」对开发者的好处

    影视剧、体育直播、娱乐直播、短视频等内容,已经成为用户最重要的消费内容。但受限于目前手机系统的限制,用户无法做到一边看视频,一边聊天、购物。画中画有着强烈的用户需求,但各开发者可能受限于工程实现难度、各手机系统的限制等种种因素,无法很好地满足用户的需求。

    现在开发者借助系统的接口,就能轻松实现画中画的能力,同时兼顾稳定性和灵活性。MIUI 诚邀各大开发者利用该特性,为用户提供更好的使用体验。

    如何支持「画中画」

    1. 声明Activity的属性:

    与分屏一样,画中画也是针对 Activity 的,因此第一件事情是声明 Activity 的属性,需要将以下属性均设为 true 才能进入「画中画」:

    android:resizeableActivity="true"

    2. 增加调起入口

    用户需要一个显性的入口使 Activity 进入画中画,因此开发者需要在应用界面增加一个控件,并在用户点击时调用 enterPictureInPictureMode() ,下图是 Android 提供的一个示例:

    MIUI 9 新功能提前看看吧

    3. 处理UI控件

    不同于原生 Android,MIUI 的「画中画」允许 Activity 接收点击事件,因此我们建议开发者在画中画模式中,保留重要的操作,如视频的暂停/播放(系统会提供关闭悬浮窗的控件,开发者无需重复添加)。又因为画中画的窗口会比平时的小,所以建议缩小控件或者隐藏某些控件。对于视频应用而言,还需要考虑缩小视频的水印(如爱奇艺、优酷在视频右上角添加的品牌水印)。

    案例3.1:建议缩小或减少控件

    MIUI 9 新功能提前看看吧

    4. 处理视频的播放

    与分屏类似,「画中画」模式的 Activity 会处于 Paused 状态,因此 Android 建议开发者在 onStart / onStop 中处理视频的「暂停/播放」,或者特殊处理「画中画」时的 Paused 状态(调用isInPictureInPictureMode() 判断是否在「画中画」)。由于暂无适配「画中画」的应用,下面举两个分屏的案例以供参考:

    案例4.1:优酷失焦点后暂停播放

    MIUI 9 新功能提前看看吧

    案例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进行处理,非常感谢!

    上一篇 2017年4月3日
    下一篇 2017年4月3日

    相关推荐