Android 多窗口詳解

2019神童透码报:多窗口支持

香港彩票透码 www.kptln.icu Android N 添加了對同時顯示多個應用窗口的支持。 在手持設備上,兩個應用可以在“分屏”模式中左右并排或上下并排顯示。 在電視設備上,應用可以使用“畫中畫”模式,在用戶與另一個應用交互的同時繼續播放視頻。

如果您使用 N Preview SDK 構建應用,則可以配置應用處理多窗口顯示的方法。 例如,您可以指定 Activity 的最小允許尺寸。 您還可以禁用應用的多窗口顯示,確保系統僅以全屏模式顯示應用。

概覽

Android N 允許多個應用同時共享屏幕。例如,用戶可以分屏顯示應用,在左邊查看網頁,同時在右邊寫郵件。 用戶體驗取決于設備:

運行 Android N 的手持設備具有分屏模式。 在此模式中,系統以左右并排或上下并排的方式分屏顯示兩個應用。 用戶可以拖動兩個應用之間的分界線,放大其中一個應用,同時縮小另一個。 
在運行 Android N 的 Nexus Player 上,應用能以畫中畫模式顯示,即在用戶瀏覽網頁或與其他應用交互的同時繼續顯示內容。 
較大設備的制造商可選擇啟用自由形狀模式,在該模式中,用戶可以自由調整各 Activity 的尺寸。 若制造商啟用此功能,設備將同時具有自由形狀模式和分屏模式。 
這里寫圖片描述 
圖 1. 兩個應用在分屏模式中左右并排顯示。

用戶可以通過以下方式切換到多窗口模式:

若用戶打開 Overview 屏幕并長按 Activity 標題,則可以拖動該 Activity 至屏幕突出顯示的區域,使 Activity 進入多窗口模式。 
若用戶長按 Overview 按鈕,設備上的當前 Activity 將進入多窗口模式,同時將打開 Overview 屏幕,用戶可在該屏幕中選擇要共享屏幕的另一個 Activity。 
用戶可以在兩個 Activity 共享屏幕的同時在這兩個 Activity 之間拖放數據 (在此之前,用戶只能在一個 Activity 內部拖放數據)。

多窗口生命周期

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

在多窗口模式中,在指定時間只有最近與用戶交互過的 Activity 為活動狀態。 該 Activity 將被視為頂級 Activity。 所有其他 Activity 雖然可見,但均處于暫停狀態。 但是,這些已暫停但可見的 Activity 在系統中享有比不可見 Activity 更高的優先級。 如果用戶與其中一個暫停的 Activity 交互,該 Activity 將恢復,而之前的頂級 Activity 將暫停。

注:在多窗口模式中,用戶仍可以看到處于暫停狀態的應用。 應用在暫停狀態下可能仍需要繼續其操作。 例如,處于暫停模式但可見的視頻播放應用應繼續顯示視頻。 因此,我們建議播放視頻的 Activity 不要暫停其 onPause() 處理程序中的視頻。 應暫停 onStop() 中的視頻,并恢復 onStart() 中的視頻播放。

如處理運行時變更中所述,用戶使用多窗口模式顯示應用時,系統將通知 Activity 發生配置變更。 這也會發生在當用戶調整應用大小,或將應用恢復到全屏模式時。 該變更與系統通知應用設備從縱向模式切換到橫向模式時的 Activity 生命周期影響基本相同,但設備不僅僅是交換尺寸,而是會變更尺寸。 如處理運行時變更中所述,您的 Activity 可以自行處理配置變更,或允許系統銷毀 Activity,并以新的尺寸重新創建該 Activity。

如果用戶調整窗口大小,并在任意維度放大窗口尺寸,系統將調整 Activity 以匹配用戶操作,同時根據需要發布運行時變更。 如果應用在新公開區域的繪制滯后,系統將使用 windowBackground 屬性或默認 windowBackgroundFallback 樣式屬性指定的顏色暫時填充該區域。

針對多窗口模式配置應用

如果您的應用面向 Android N,您可以對應用的 Activity 是否支持多窗口顯示以及顯示方式進行配置。 您可以在清單文件中設置屬性,以控制大小和布局。 根 Activity 的屬性設置適用于其任務棧中的所有 Activity。 例如,如果根 Activity 已 android:resizeableActivity 設定為 true,則任務棧中的所有 Activity 都將可以調整大小。

注:如果您使用低于 Android N 版本的 SDK 構建多向應用,則用戶在多窗口模式中使用應用時,系統將強制調整應用大小。 系統將顯示對話框,提醒用戶應用可能會發生異常。 系統不會調整定向應用的大??;如果用戶嘗試在多窗口模式下打開定向應用,應用將全屏顯示。

android:resizeableActivity
在清單的 <activity> 或 <application> 節點中設置該屬性,啟用或禁用多窗口顯示:android:resizeableActivity=["true" | "false"]12341234

如果該屬性設置為 true,Activity 將能以分屏和自由形狀模式啟動。 如果此屬性設置為 false,Activity 將不支持多窗口模式。 如果該值為 false,且用戶嘗試在多窗口模式下啟動 Activity,該 Activity 將全屏顯示。

如果您的應用面向 Android N,但未對該屬性指定值,則該屬性的值默認設為 true。

android:supportsPictureInPicture 
在清單文件的 activity 節點中設置該屬性,指明 Activity 是否支持畫中畫顯示。 如果 android:resizeableActivity 為 false,將忽略該屬性。

android:supportsPictureInPicture=[“true” | “false”]

布局屬性

對于 Android 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="top|end"
          android:minimalHeight="450dp"
          android:minimalWidth="300dp" /></activity>12345671234567

在多窗口模式中運行應用

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

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

在設備處于多窗口模式中時,某些功能會被禁用或忽略,因為這些功能對與其他 Activity 或應用共享設備屏幕的 Activity 而言沒有意義。 此類功能包括:

某些系統 UI 自定義選項將被禁用;例如,在非全屏模式中,應用無法隱藏狀態欄。 
系統將忽略對 android:screenOrientation 屬性所作的更改。

多窗口變更通知和查詢

Activity 類中添加了以下新方法,以支持多窗口顯示。 
Activity.isInMultiWindowMode() 
調用該方法以確認 Activity 是否處于多窗口模式。 
Activity.isInPictureInPictureMode() 
調用該方法以確認 Activity 是否處于畫中畫模式。 
注:畫中畫模式是多窗口模式的特例。 如果 myActivity.isInPictureInPictureMode() 返回 true,則 myActivity.isInMultiWindowMode() 也返回 true。

Activity.onMultiWindowModeChanged() 
Activity 進入或退出多窗口模式時系統將調用此方法。 在 Activity 進入多窗口模式時,系統向該方法傳遞 true 值,在退出多窗口模式時,則傳遞 false 值。 
Activity.onPictureInPictureModeChanged() 
Activity 進入或退出畫中畫模式時系統將調用此方法。 在 Activity 進入畫中畫模式時,系統向該方法傳遞 true 值,在退出畫中畫模式時,則傳遞 false 值。 
每個方法還有 Fragment 版本,例如 Fragment.isInMultiWindowMode()。

進入畫中畫模式

如需在畫中畫模式中啟動 Activity,請調用新方法 Activity.enterPictureInPictureMode()。 如果設備不支持畫中畫模式,則此方法無效。 如需了解詳細信息,請參閱畫中畫文檔。

在多窗口模式中啟動新 Activity 
在啟動新 Activity 時,用戶可以提示系統如果可能,應將新 Activity 顯示在當前 Activity 旁邊。 要執行此操作,可使用標志 Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT。 傳遞此標志將請求以下行為:

如果設備處于分屏模式,系統會嘗試在啟動系統的 Activity 旁創建新 Activity,這樣兩個 Activity 將共享屏幕。 系統并不一定能實現此操作,但如果可以,系統將使兩個 Activity 處于相鄰的位置。 
如果設備不處于分屏模式,則該標志無效。 
如果設備處于自由形狀模式,則在啟動新 Activity 時,用戶可通過調用 ActivityOptions.setLaunchBounds() 指定新 Activity 的尺寸和屏幕位置。 如果設備不處于多窗口模式,則該方法無效。

注:如果您在任務棧中啟動 Activity,該 Activity 將替換屏幕上的 Activity,并繼承其所有的多窗口屬性。 如果要在多窗口模式中以單獨的窗口啟動新 Activity,則必須在新的任務棧中啟動此 Activity。

支持拖放

用戶可以在兩個 Activity 共享屏幕的同時在這兩個 Activity 之間拖放數據 (在此之前,用戶只能在一個 Activity 內部拖放數據)。 因此,如果您的應用目前不支持拖放功能,您可以在其中添加此功能。

N Preview SDK 擴展了 android.view 軟件包,以支持跨應用拖放。

android.view.DropPermissions 
令牌對象,負責指定對接收拖放數據的應用授予的權限。 
View.startDragAndDrop() 
View.startDrag() 的新別名。要啟用跨 Activity 拖放,請傳遞新標志 View.DRAG_FLAG_GLOBAL。 如需對接收拖放數據的 Activity 授予 URI 權限,可根據情況傳遞新標志 View.DRAG_FLAG_GLOBAL_URI_READ 或 View.DRAG_FLAG_GLOBAL_URI_WRITE。 
View.cancelDragAndDrop() 
取消當前正在進行的拖動操作。只能由發起拖動操作的應用調用。 
View.updateDragShadow() 
替換當前正在進行的拖動操作的拖動陰影。只能由發起拖動操作的應用調用。 
Activity.requestDropPermissions() 
請求使用 DragEvent 中包含的 ClipData 傳遞的內容 URI 的權限。

測試應用的多窗口支持

無論您是否針對 Android N 更新應用,都應驗證應用在多窗口模式下的行為,以防用戶嘗試在運行 Android N 的設備上以多窗口模式啟動應用。

配置測試設備

如果在設備上安裝 Android N,則將自動支持分屏模式。

如果應用并非使用 N Preview SDK 構建 
如果您的應用不是使用 N Preview SDK 構建的,則用戶嘗試在多窗口模式中使用應用時,系統將強制調整應用大小,除非應用進行了定向聲明。

如果您的應用沒有進行定向聲明,則應在運行 Android N 的設備上啟動應用,并嘗試將應用切換到分屏模式。 驗證并確保在強制調整應用大小時用戶體驗可接受。

如果應用進行了定向聲明,則應嘗試將應用切換到多窗口模式。 驗證并確保執行此操作后,應用仍保持全屏模式。

如果支持多窗口模式

如果您的應用是使用 N Preview SDK 構建的,且未禁用多窗口支持,則分別在分屏和自由形狀模式下驗證以下行為。

在全屏模式下啟動應用,然后通過長按 Overview 按鈕切換到多窗口模式。 驗證并確保應用正常切換。 
直接在多窗口模式中啟動應用,驗證并確保應用正常啟動。 您可以按一下 Overview 按鈕,再長按應用的標題欄,并將其拖動到屏幕上任一突出顯示的區域,從而在多窗口模式中啟動應用。 
拖動分界線,在分屏模式中調整應用的大小。 驗證并確保應用正常調整大小且未崩潰,并且必要的 UI 元素仍可見。 
如果您指定了應用的最小尺寸,請嘗試將應用尺寸調整到低于最小值。 驗證并確保無法將應用尺寸調整到低于指定最小值。 
完成所有測試后,驗證并確保應用性能可以接受。例如,驗證并確保調整應用大小后更新 UI 沒有長時間的滯后。

測試檢查單

要在多窗口模式中驗證應用性能,請執行以下操作。 除非另有說明,否則請分別在分屏和多窗口模式中執行以下操作。

進入和退出多窗口模式。

從您的應用切換到另一個應用,驗證并確保應用在非活動但可見的狀態下正常運行。 例如,如果您的應用在播放視頻,則驗證并確保在用戶與另一個應用交互時視頻仍在繼續播放。 
在分屏模式中,嘗試移動分界線,放大或縮小應用。 分別在左右和上下并排顯示模式中嘗試這些操作。 驗證并確保應用不會崩潰,主要功能可見,且調整操作不需要過長時間。 
快速連續執行幾次調整操作。驗證并確保應用不會崩?;虺魷幟詿嫘孤?。 有關檢查應用內存使用率的信息,請參閱查看內存使用率。 
在多個不同窗口配置中正常使用應用,驗證并確保應用正常運行。 驗證并確保文本可讀,且 UI 元素大小正常,不影響交互。 
如果已禁用多窗口支持 
如果您通過設置 android:resizableActivity=”false” 禁用了多窗口支持,則應在運行 Android N 的設備上啟動應用,并嘗試將應用切換到自由形狀和分屏模式。 驗證并確保執行此操作后,應用仍保持全屏模式。

來源:CSDN

上一篇: Android應用內存泄漏的定位、分析與解決策略

下一篇: 安卓開發技巧篇(布局查看神器)

分享到: 更多
pk拾计划软件手机版 藏分出款成功率高吗 大乐透篮球最大数字是多少 快三大小单双稳赚买法APP 天津时时票网购平台 pk10人工计划网站 大乐透玩法 彩票怎么才能稳赚 pk10技巧稳赚贴吧 夺宝阁计划 必富lg游戏官网 北京pk10大享计划软件 全年无错36码特围网 非凡炸金花真人提现版 重庆时时免费预测 pc蛋蛋如何稳赚不赔