2018-06-11
开启分屏
只要你编译使用sdk版本大于等于7.0就可以支持分屏了:compileSdkVersion 25
,如果想要禁用分屏,只需要在AndroidManifest.xml
添加属性:android:resizeableActivity=“false”,这个属性使用于application和Activity标签。
7.0中默认是true。
除了分屏模式之外,还有自由模式(Freeform,常见于桌面设备,类似于windows的应用窗口,可以拖拽边缘改变大小)。
生命周期
开启多窗口模式不会更改Activity的生命周期,
在多窗口模式中,在指定时间只有最近与用户交互过的 Activity 为活动状态。 该 Activity 将被视为顶级 Activity。 所有其他 Activity 虽然可见,但均处于暂停状态。 但是,这些已暂停但可见的 Activity 在系统中享有比不可见 Activity 更高的优先级。 如果用户与其中一个暂停的 Activity 交互,该 Activity 将恢复,而之前的顶级 Activity 将暂停。
例如:
在上图中,我先打开了上面的Activity,然后又打开了下面Gmail的Activity,这时下面的Activity处于可交互(顶级Activity)状态,上面的Activity虽然课件,但是处于暂停状态,这时按下back键是对下面Activity进行操作。当点击上面的Activity时,上面的Activity处于可交互状态,下面的Activity处于暂停状态。
PS:在多窗口模式中,用户仍可以看到处于暂停状态的应用。 应用在暂停状态下可能仍需要继续其操作。 例如,处于暂停模式但可见的视频播放应用应继续显示视频。 因此,我们建议播放视频的 Activity 不要暂停其 onPause() 处理程序中的视频。 应暂停 onStop() 中的视频,并恢复 onStart() 中的视频播放。
用户使用多窗口模式显示应用时,系统将通知 Activity 发生配置变更。 该变更与系统通知应用设备从纵向模式切换到横向模式时的 Activity 生命周期影响基本相同,但设备不仅仅是交换尺寸,而是会变更尺寸。您的 Activity 可以自行处理配置变更,或允许系统销毁 Activity,并以新的尺寸重新创建该 Activity。
给Activity加上如下配置可以保证切换成多屏模式或者画中画模式时Activity不会销毁重建。
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
针对多窗口模式配置应用
如果应用支持 Android N,您可以对应用的 Activity 是否支持多窗口显示以及显示方式进行配置。 您可以在清单文件中设置属性,以控制大小和布局。 根 Activity 的属性设置适用于其任务栈中的所有 Activity。 例如,如果根 Activity 中 android:resizeableActivity
设定为 true,则任务栈中的所有 Activity 都将可以调整大小。
如果使用低于 Android N 版本的 SDK 构建多向应用,则用户在多窗口模式中使用应用时,系统将强制调整应用大小。 系统将显示对话框,提醒用户应用可能会发生异常。 系统不会调整定向应用的大小;如果用户尝试在多窗口模式下打开定向应用,应用将全屏显示。
** android:resizeableActivity **
在清单的 <activity>
或 <application>
节点中设置该属性,启用或禁用多窗口显示:
android:resizeableActivity=["true" | "false"]
如果该属性设置为 true,Activity 将能以分屏和自由形状模式启动。 如果此属性设置为 false,Activity 将不支持多窗口模式。 如果该值为 false,且用户尝试在多窗口模式下启动 Activity,该 Activity 将全屏显示。
如果应用面向 Android N,但未对该属性指定值,则该属性的值默认设为 true。
** android:supportsPictureInPicture **
在清单文件的 <activity>
节点中设置该属性,指明 Activity 是否支持画中画显示。 如果 android:resizeableActivity
为 false,将忽略该属性。
android:supportsPictureInPicture=["true" | "false"]
布局属性
对于 Android N,<layout>
清单元素支持以下几种属性,这些属性影响 Activity 在多窗口模式中的行为:
android:defaultWidth
以自由形状模式启动时 Activity 的默认宽度。
android:defaultHeight
以自由形状模式启动时 Activity 的默认高度。
android:gravity
以自由形状模式启动时 Activity 的初始位置。请参阅 Gravity 参考资料,了解合适的值设置。
android:minimalHeight、android:minimalWidth
分屏和自由形状模式中 Activity 的最小高度和最小宽度。 如果用户在分屏模式中移动分界线,使 Activity 尺寸低于指定的最小值,系统会将 Activity 裁剪为用户请求的尺寸。
例如,以下节点显示了如何指定 Activity 在自由形状模式中显示时 Activity 的默认大小、位置和最小尺寸:
<activity android:name=".MyActivity">
<layout android:defaultHeight="500dp"
android:defaultWidth="600dp"
android:gravity="</