Android 8.0 Oreo 画中画模式

Android 8.0 Oreo(API Level 26)允许活动启动画中画 Picture-in-picture(PIP)模式。PIP 是一种特殊类型的多窗口模式,主要用于视频播放。PIP 模式已经可用于 Android TV,而 Android 8.0 则让该功能可进一步用于其他 Android 设备。

画中画 Picture-in-picture(PIP)模式


当一个活动在画中画模式,它处于暂停状态,但应继续展示内容。出于这个原因,您应该确保您的应用程序不在的onpause ( )中处理暂停播放。相反,您应该在onstop ( )暂停播放·,在onstart ( )中继续播放。



指定您的活动可以使用画中画模式

从 Android 8.0 开始,如果您支持画中画模式,您不需要在 Manifest 中设android:resizeableActivity为 true,您只需要在其他多窗口模式中设置android:resizeableActivity

Android 8.0(API Level 26)引入了一个新的对象PictureInPictureParams,您通过画中画方法指定一个活动应该表现的画中画模式。该对象指定性能例如首选纵横比。

现在不仅仅是在 Android TV 上,还可以在所有 Android 设备上使用 “添加画中画” 中描述的现有 PIP 方法。此外,Android 8.0 还提供以下方法来支持 PIP 模式:

Activity.enterPictureInPictureMode (PictureInPictureParams args): 将活动放在画中画模式中。在args中指定活动的宽高比和其他配置设置。如果args中的任何字段为空,系统将使用您上次调用的Activity.setPictureInPictureParams ( )。指定的活动被放置在屏幕的一个角落;屏幕的其余部分都填充了屏幕上的先前活动。进入画中画模式的活动进入暂停状态,但仍保持启动状态。 如果用户点击画中画活动,则系统显示给用户交互菜单,在画中画模式中,没有任何触摸操作可以回到活动。

Activity.setPictureInPictureParams ( ): 更新活动的画中画配置。 如果活动当前处于画中画模式,这时将会更新,这在活动比发生变化的时候是很有用的。 如果活动不在画中画模式中,这些设置不管您是否调用了enterPictureInPictureMode ( )方法,它都会生效。

Android 多窗口支持

两个应用在分屏模式中左右并排显示


从 Android 7.0 Nougat 开始,Android 允许多个应用同时共享屏幕。例如:用户可以分屏显示应用,在左边查看网页,同时在右边写邮件。 这些功能取决于:

运行 Android 设备具有分屏模式。 在此模式中,系统以左右并排或上下并排的方式分屏显示两个应用。 用户可以拖动两个应用之间的分界线,放大其中一个应用,同时缩小另一个。

在运行 Android 的 Nexus Player 上,应用能以画中画模式显示,即在用户浏览网页或与其他应用交互的同时继续显示内容。

较大设备的制造商可选择启用自由形状模式,在该模式中,用户可以自由调整各 Activity 的尺寸。 若制造商启用此功能,设备将同时具有自由形状模式和分屏模式。

用户可以通过以下方式切换到多窗口模式:

若用户打开 Overview 屏幕并长按 Activity 标题,则可以拖动该 Activity 至屏幕突出显示的区域,使 Activity 进入多窗口模式。

若用户长按 Overview 按钮,设备上的当前 Activity 将进入多窗口模式,同时将打开 Overview 屏幕,用户可在该屏幕中选择要共享屏幕的另一个 Activity。

用户可以在两个 Activity 共享屏幕的同时在这两个 Activity 之间拖放数据 (在此之前,用户只能在一个 Activity 内部拖放数据)。

针对多窗口模式配置应用

您可以对应用的 Activity 是否支持多窗口显示和显示方式进行配置。 您可以在 Manifest 文件中设置属性,以控制大小和布局。 根 Activity 的属性设置适用于其任务栈中的所有 Activity。例如:如果根 Activity 已android:resizeableActivity设定为 true,则任务栈中的所有 Activity 都将可以调整大小。

android:resizeableActivity

在 Manifest 的或节点中设置该属性,启用或禁用多窗口显示:

android:resizeableActivity=["true"|"false"]

如果该属性设置为 true,Activity 将能以分屏和自由形状模式启动。 如果此属性设置为 false,Activity 将不支持多窗口模式。 如果该值为 false,且用户尝试在多窗口模式下启动 Activity,该 Activity 将全屏显示。

多窗口模式中被禁用的功能

在设备处于多窗口模式中时,某些功能会被禁用或忽略,因为这些功能对与其他 Activity 或应用共享设备屏幕的 Activity 而言没有意义。 此类功能包括:

某些系统 UI 自定义选项将被禁用;例如:在非全屏模式中,应用无法隐藏状态栏。

系统将忽略对 android:screenOrientation 属性所作的更改。

布局属性

清单元素支持以下几种属性,这些属性影响 Activity 在多窗口模式中的行为:

android:defaultWidth

以自由形状模式启动时 Activity 的默认宽度。

android:defaultHeight

以自由形状模式启动时 Activity 的默认高度。

android:gravity

以自由形状模式启动时 Activity 的初始位置。

android:minimalHeight、android:minimalWidth

分屏和自由形状模式中 Activity 的最小高度和最小宽度。 如果用户在分屏模式中移动分界线,使 Activity 尺寸低于指定的最小值,系统会将 Activity 裁剪为用户请求的尺寸。

例如:以下节点显示了如何指定 Activity 在自由形状模式中显示时 Activity 的默认大小、位置和最小尺寸:

android:defaultWidth="600dp"

android:gravity="top|end"

android:minimalHeight="450dp"

android:minimalWidth="300dp"/>

推荐阅读更多精彩内容