Android7.0分屏适配介绍

本文章抄送Androiddeveloper网站,目的是为方便学习记录。

切换到多窗口模式方式

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

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

多窗口生命周期

多窗口模式不会更改Activity生命周期。

在多窗口模式中,在指定时间只有最近与用户交互过的Activity为活动状态。该Activity将被视为顶级Activity。所有其他Activity虽然可见。但均处于暂停状态。但是,这些已经暂停但可见的Activity在系统中享有比不可见Activity更高优先级。如果用户与其中一个暂停的Activity交互,改Activity将恢复,而之前的顶级Activity将暂停。

> 注:在多窗口模式中,用户仍可以看到处于暂停状态的应用,。应用在暂停状态下可能仍需要继续其操作。例如:处于暂停模式但可见的视屏播放应用继续显示视频。因此,我们建议播放视频的Activity不要暂停其onPauser()处理程序中的视频。应暂停onStop()中的视频,并恢复onStart()中的视频播放。

如处理运行时变更中所述,用户使用多窗口模式显示应用时,系统将通知Activity发生配置变更。这也会发生在当用户调整应用大小,或将应用恢复到全屏幕模式。该变更与系统通知应用设备从纵向模式切换到横向模式时 的Activity生命周期影响基本相同,但设备不仅仅是交换尺寸,而是会变更尺寸。如处理运行时变更中所述,您的Activity可以自行处理配置变更,或许系统销毁Activity,并以新的尺寸重新创建改Activity。

如果用户调整窗口大小,并在任意纬度放大窗口尺寸,系统将调整Activity以匹配用户操作,同时根据需要发布运行时变更。如果应用在心公开区域的回执滞后,系统将使用windowBackground属性或默认windowBackground样式属性指定的颜色暂时填充该区域。

针对多窗口模式配置应用

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

> 注:如果您使用低于Android N版本的SDK构建应用,则用户再多窗口模式中适用应用时,系统将强制调整应用的大小。系统将显示对话框,提示用户应用可能会发生异常。系统将不会调整定向应用的大小;如果用户尝试再多窗口模式下打开定向应用,应用将全屏显示。

android.resizeableActivity

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

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

 布局属性 

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

android:defaultWidth //以自由形状模式启动时Activity的默认高度

android:defaultHeight // 以自由形式模式启动时Activity的默认高度

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

android:minimalHeight、android:minimalWidth // 分屏和自由形状模式中Activity的最小高度和最小宽度。

 再多窗口模式中运行应用

Android N添加了新功能,以支持可在多窗口模式中运行应用。

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

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

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

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


多窗口变更通知和查询 

Activity类中添加一下新方法,以支持多窗口显示。有关方法详细信息,请阅读NPreview SDK参考

Activity.isInMultiWindowMode() // 调用该方法以确认Activity是否处于多窗口模式。

Activity.isInPictureInPictureMode() // 调用该方法以确认Activity是否处于画中画模式。

> 注:画中画模式是多窗口模式的特列。如果myActivity.isInPictureInPictureMode()返回true,则myActivity.isInMultiWindowMode()也返回true。

Activity.onMultWondowModeChanged() // Activity进入或退出多窗口模式时系统将调用此方法。在Activity进入多窗口模式时,系统向该方法传递true值,退出多窗口模式时,则传递false值。

Activity.onPictureInPictureModeChanged() // Activity进入或退出画中画模式时系统将调用该方法。在Activity进入画中画模式时,系统向该方法传递true值,退出画中画模式时,则传递false值。

进入画中画模式 

如需要在画中画模式中启动Activity,请调用新方法Activity.enterPictureInPictureMode()。如果设备不支持画中画模式,则此方法无效。

在多窗口模式中启动新的Activity 

在启动新Activity时,用户可以提示系统如果可能,应将新的Activity显示在当前Activity旁边。要执行此操作,可以使用标志`Intent.FLAG_ACTIVITY_TO_ADJACENT`。传递此标志将请求一下行为:

- 如果设备处于分屏状态,系统会尝试在启动系统的Activity旁边创建新的Activity,这样两个Activity将共享屏幕。系统并不一定实现此操作。但如果可以,系统将使两个Activity处于相邻的位置。

- 如果设备不处于分屏状态,侧设置将无效。

如果设备处于自由形状模式,在启动新Activity时,用户可以调用ActivityOptions.setLaunchBounds()指定新Activity的尺寸和位置,如果设备不处于多窗口模式,则该方法无效。

>注:如果您在任务栈中启动Activity,改Activity将替换屏幕上的Activity,并继承其所有的多窗口属性。如果要在多窗口模式中以单独的窗口启动新的Activity,则必须在新的任务栈启动此Activity。

你可能感兴趣的:(Android7.0分屏适配介绍)