4.9 多窗口模式
Android N支持多窗口模式,或者叫分屏模式,即在屏幕上可以同时显示多个窗口。在手机模式下,两个应用可以并排或者上下同时显示,如图4.54所示,屏幕上半部分的窗口是系统的CLOCK应用,下半部分是系统设置功能。用户可以拖动两个应用之间的分界线改变两个窗口的大小,放大其中一个应用,同时缩小另一个应用。在电视设备上,可以实现“画中画”功能。在分屏模式下,各个窗口的应用都可以正常运行,但是只能有一个窗口获得焦点,而另外的窗口则属于暂停状态。
图4.54 分屏模式
Android N用户可以通过以下方式切换到多窗口模式:
(1)用户打开Overview屏幕并长按Activity标题,可以拖动该Activity至屏幕突出显示的区域,使Activity进入多窗口模式。
(2)用户长按Overview按钮,设备上当前的Activity将进入多窗口模式,同时将打开Overview屏幕,用户可在该屏幕中选择要共享屏幕的另一个Activity。
用户可以在两个Activity共享屏幕的同时在这两个Activity之间拖放数据。
默认情况下,Android N的Activity都是开启多窗口模式的。例如,我们通过Android Studio构建一个默认的空Activity应用MultiScreenDemo,无须做任何修改,该Activity即可使用多窗口模式,运行效果如图4.55所示。
图4.55 自开发应用的多窗口模式
我们在MainActivity上添加一个按钮,并实现点击打开第二个Activity的功能,代码如下:
点击“新窗口”按钮后,第二个窗口会被创建,并覆盖掉第一个窗口,如图4.56所示。
图4.56 新窗口
默认情况下,同一个应用的多个Activity会共用同一个窗口,且无法分配到不同窗口中。若希望同一个应用的不同窗体可以被分配到不同窗口中,需要在启动新窗体时给Intent设置一个FLAG_ACTIVITY_LAUNCH_ADJACENT标志,这样新Activity就会在新的栈中被启动,独立于原来的Activity,进而实现两个Activity被放置于不同的窗口中,如图4.57所示。
图4.57 同一应用的两个窗口
关键代码如下:
Android N系统为Activity增添了<layout>清单元素对Activity在多窗口模式中的行为进行支持,包括以下几种属性:
• android:defaultWidth,以自由形状模式启动时Activity的默认宽度。
• android:defaultHeight,以自由形状模式启动时Activity的默认高度。
• android:gravity,以自由形状模式启动时Activity的初始位置。请参阅Gravity的参考资料,了解合适的值进行设置。
• android:minimalHeight、android:minimalWidth,分屏和自由形状模式中Activity的最小高度和最小宽度。如果用户在分屏模式中移动分界线,使Activity尺寸低于指定的最小值,系统会将Activity裁剪为用户请求的尺寸。
例如,以下代码显示了如何指定Activity在自由形状模式显示时Activity的默认大小、位置和最小尺寸:
如果不想让Activity使用多窗口模式,只需要在清单文件中为Activity节点设置:
android:resizeableActivity=”false”
此属性设置为false,Activity将不支持多窗口模式。在该值为false的情况下,如果用户尝试在多窗口模式下启动Activity,该Activity将全屏显示。各位读者可以自行尝试。