page.title=多視窗支援 page.metaDescription=Android N 新推出支援一次顯示多個應用程式。 page.keywords="multi-window", "android N", "split screen", "free-form" @jd:body
Android N 新增一次顯示多個應用程式的支援。 在手持式裝置上,兩個應用程式可以在「分割畫面」模式中並排或上下排列。 在電視裝置上,應用程式能使用「子母畫面」模式,在使用者與另一個應用程式互動時持續播放影片。
如使用 N Preview SDK 建置應用程式,您可以設定應用程式處理多視窗顯示的方式。 例如,您可以指定活動的最小可允許尺寸。 您也可以停用應用程式的多視窗顯示,確保系統只會以全螢幕模式顯示您的應用程式。
Android N 允許多個應用程式同時分享螢幕。例如,使用者可以分割畫面,在左邊檢視網頁,同時在右邊撰寫電子郵件。 使用者體驗依裝置而異:
使用者可以透過下列方式來切換多視窗模式:
使用者可以在活動分享螢幕時,將一個活動中的資料拖放到另一個活動。 (之前,使用者只能在單一活動內拖放資料)。
多視窗模式不會變更活動生命週期。
在多視窗模式中,特定時間只有最近與使用者互動的活動才會處於使用中。 這會視為「最上層」活動。 即使能看到所有其他活動,但也處於暫停狀態。 然而,相較於看不到的活動,系統會給予這類暫停但可看見的活動較高的優先順序。 若使用者改與其中一個暫停的活動互動,該活動就會恢復,使先前的最上層活動變成暫停。
注意:在多視窗模式中,使用者仍能見到處於暫停狀態的應用程式。 即使處於暫停,應用程式仍需要進行其活動。 例如,處於暫停模式但仍可以看見的影片播放應用程式,應會持續顯示其影片。 因此,建議您在播放影片的活動 {@link android.app.Activity#onPause onPause()} 處理常式中,「不要」暫停影片。 應該改為在 {@link android.app.Activity#onStop onStop()}, and resume playback in {@link android.app.Activity#onStart onStart()} 中暫停影片。
當使用者將應用程式放入多視窗模式時,系統會通知活動發生設定變更,如處理執行階段變更所指定。 基本上,此變更的活動生命週期和系統通知應用程式,裝置從垂直模式切換為水平模式時的生命週期相當,差別在於裝置尺寸會改變,而不只是切換。 如處理執行階段變更中所述,您的活動能自行處理設定變更,或會允許系統終結活動並以新的尺寸重新建立。
如果使用者調整視窗大小並加大長或寬的尺寸,系統會根據使用者動作來調整活動大小,並視需要發出執行階段變更。
若應用程式在新公開的區域中繪製發生延遲,系統會暫時使用 {@link
android.R.attr#windowBackground windowBackground} 所指定的色彩或預設的
windowBackgroundFallback
樣式屬性,填滿那些區域。
您的應用程式若以 Android N 為目標,您可以設定應用程式的活動是否支援多視窗顯示以及支援的方式。 您可以在宣示說明中設定屬性,同時控制大小與版面配置。 根活動的屬性設定會套用到它工作堆疊內的所有活動。
注意:如果您使用 Android N 以下的 SDK 版本建置多螢幕方向應用程式,而且使用者會在多視窗模式中使用該應用程式,系統會強制調整應用程式大小。 系統會顯示對話方塊向使用者警告應用程式行為異常。 系統「不會」調整螢幕方向固定的應用程式大小,如使用者嘗試在多視窗模式下開啟螢幕方向固定的應用程式,應用程式會佔滿整個螢幕。
在宣示說明的 <activity>
或
<application>
節點中,設定此屬性以啟用或停用多視窗顯示:
android:resizeableActivity=["true" | "false"]
如將此屬性設定為 true,就能以分割畫面和自由形式模式來啟動活動。 如將屬性設定為 false,活動會不支援多視窗模式。 如果此值為 false,而使用者嘗試以多視窗模式啟動活動,該活動會佔滿整個螢幕。
您的應用程式如以 Android N 為目標,但您並未指定此屬性的值,屬性的預設值為 true。
在宣示說明的 <activity>
節點中,設定此屬性以指出活動是否支援子母畫面顯示:
如果 android:resizeableActivity
為 false,則會忽略此屬性。
android:supportsPictureInPicture=["true" | "false"]
使用 Android N,<layout>
宣示說明元素支援的數個屬性會影響多視窗模式中的活動行為。
android:defaultWidth
android:defaultHeight
android:gravity
android:minimalSize
例如,在自由形式模式中顯示活動時,下列程式碼顯示如何指定活動的預設大小與位置以及它的最小大小:
<activity android:name=".MyActivity"> <layout android:defaultHeight="500dp" android:defaultWidth="600dp" android:gravity="top|end" android:minimalSize="450dp" /> </activity>
Android N 提供的新功能支援在多視窗模式中執行應用程式。
當裝置處於多視窗模式時,有些功能無法用於會與其他活動或應用程式分享裝置螢幕的活動,因此會加以停用或忽略。 這類功能包括:
android:screenOrientation
屬性的變更。
已將下列可支援多視窗顯示的新方法新增至 {@link android.app.Activity} 類別。如需每個方法的詳細資訊,請參閱 N Preview SDK 參考資料。
Activity.inMultiWindow()
Activity.inPictureInPicture()
注意:子母畫面模式為多視窗模式的特殊情況。
如果 myActivity.inPictureInPicture()
傳回 true,那麼 myActivity.inMultiWindow()
也會傳回 true。
Activity.onMultiWindowChanged()
Activity.onPictureInPictureChanged()
上述的每一個方法也都有 {@link android.app.Fragment} 版本,例如
Fragment.inMultiWindow()
。
呼叫新方法
Activity.enterPictureInPicture()
,即可將活動放入子母畫面模式。如果裝置不支援子母畫面模式,這個方法就沒有作用。
如需詳細資訊,請參閱子母畫面文件。
當您啟動新活動,可以提示系統應儘可能在目前活動的旁邊顯示新的活動。
如要這樣做,請使用旗標
Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT
。
傳遞此旗標會要求下列行為:
如果裝置處於自由形式模式,而您正在啟動新的活動,您可以呼叫
ActivityOptions.setLaunchBounds()
,指定新活動的尺寸與畫面位置。
如果裝置未處於多視窗模式,這個方法就沒有作用。
注意:如果您在工作堆疊內啟動活動,該活動就會取代畫面上的活動,繼承它的所有多視窗屬性。 如果您想要在多視窗模式中,以個別的視窗啟動活動,您必須在新的工作堆疊中啟動該活動。
使用者可以在兩個活動分享螢幕時,將一個活動中的資料拖放到另一個活動。 (之前,使用者只能在單一活動內拖放資料)。 因此,若您的應用程式目前不支援拖曳功能,建議您將該功能新增至應用程式。
N Preview SDK 擴充 android.view
套件,支援跨應用程式的拖放功能。如需下列類別與方法的詳細資訊,請參閱 N Preview SDK 參考資料。
android.view.DropPermissions
View.startDragAndDrop()
View.DRAG_FLAG_GLOBAL
,就可以啟用跨活動的拖放功能。
如果您需要將 URI 權限授予接收者活動,請視需要傳遞新旗標
View.DRAG_FLAG_GLOBAL_URI_READ
或
View.DRAG_FLAG_GLOBAL_URI_WRITE
。
View.cancelDragAndDrop()
View.updateDragShadow()
Activity.requestDropPermissions()
不論您是否針對 Android N 更新您的應用程式,都應該確認應用程式在多視窗模式中的行為為何,以免使用者試圖在執行 Android N 的裝置上以多視窗模式啟動應用程式。
如果您在裝置上安裝 Android N,即自動支援分割畫面模式。
若您並非以 N Preview SDK 建置應用程式,而且使用者會試圖在多視窗模式中使用該應用程式,除非應用程式宣告螢幕方向固定,否則系統會強制調整應用程式大小。
若您的應用程式並未宣告螢幕方向固定,您應該在執行 Android N 的裝置上啟動應用程式,並嘗試將應用程式放入分割畫面模式。 確認強制調整應用程式大小時的使用者體驗可以接受。
若您的應用程式宣告螢幕方向固定,您應該嘗試將應用程式放入多視窗模式。 確認您這樣做時,應用程式依然會處於全螢幕模式。
如果您以 N Preview SDK 建置應用程式且未停用多視窗支援,請在分割畫面與自由形式模式下,確認下列行為:
若要確認應用程式在多視窗模式中的效能,請嘗試下列操作。 除非另外註明,否則您應該在分割畫面與多視窗模式中嘗試這些操作。
若您已設定
android:resizableActivity="false"
來停用多視窗支援,您應該在執行 Android N 的裝置上啟動應用程式,並嘗試將應用程式放入自由形式與分割畫面模式。
確認您這樣做時,應用程式依然會處於全螢幕模式。