Android 8.0 Oreo 畫中畫模式

Android 8.0 Oreo(API Level 26)允許活動啟動畫中畫 Picture-in-picture(PIP)模式。PIP 是一種特殊類型的多窗口模式,主要用于視頻播放。PIP 模式已經可用于 Android TV,而 Android 8.0 則讓該功能可進一步用于其他 Android 設備。
畫中畫 Picture-in-picture(PIP)模式
當一個活動在畫中畫模式,它處于暫停狀態,但應繼續展示內容。出于這個原因,您應該確保您的應用程序不在的 onpause ( ) 中處理暫停播放。相反,您應該在 onstop ( ) 暫停播放·,在onstart ( ) 中繼續播放。
指定您的活動可以使用畫中畫模式
從 Android 8.0 開始,如果您支持畫中畫模式,您不需要在 Manifest 中設 android:resizeableActivity 為 true,您只需要在其他多窗口模式中設置 android:resizeableActivity
Android 8.0(API Level 26)引入了一個新的對象 PictureInPictureParams,您通過畫中畫方法指定一個活動應該表現的畫中畫模式。該對象指定性能例如***縱橫比。
現在不僅僅是在 Android TV 上,還可以在所有 Android 設備上使用 “添加畫中畫” 中描述的現有 PIP 方法。此外,Android 8.0 還提供以下方法來支持 PIP 模式:
- Activity.enterPictureInPictureMode (PictureInPictureParams args) : 將活動放在畫中畫模式中。在 args 中指定活動的寬高比和其他配置設置。如果 args 中的任何字段為空,系統將使用您上次調用的 Activity.setPictureInPictureParams ( ) 。指定的活動被放置在屏幕的一個角落;屏幕的其余部分都填充了屏幕上的先前活動。進入畫中畫模式的活動進入暫停狀態,但仍保持啟動狀態。 如果用戶點擊畫中畫活動,則系統顯示給用戶交互菜單,在畫中畫模式中,沒有任何觸摸操作可以回到活動。
- Activity.setPictureInPictureParams ( ) : 更新活動的畫中畫配置。 如果活動當前處于畫中畫模式,這時將會更新,這在活動比發生變化的時候是很有用的。 如果活動不在畫中畫模式中,這些設置不管您是否調用了 enterPictureInPictureMode ( ) 方法,它都會生效。
Android 多窗口支持
△ 兩個應用在分屏模式中左右并排顯示
從 Android 7.0 Nougat 開始,Android 允許多個應用同時共享屏幕。例如:用戶可以分屏顯示應用,在左邊查看網頁,同時在右邊寫郵件。 這些功能取決于:
- 運行 Android 設備具有分屏模式。 在此模式中,系統以左右并排或上下并排的方式分屏顯示兩個應用。 用戶可以拖動兩個應用之間的分界線,放大其中一個應用,同時縮小另一個。
- 在運行 Android 的 Nexus Player 上,應用能以畫中畫模式顯示,即在用戶瀏覽網頁或與其他應用交互的同時繼續顯示內容。
- 較大設備的制造商可選擇啟用自由形狀模式,在該模式中,用戶可以自由調整各 Activity 的尺寸。 若制造商啟用此功能,設備將同時具有自由形狀模式和分屏模式。
用戶可以通過以下方式切換到多窗口模式:
- 若用戶打開 Overview 屏幕并長按 Activity 標題,則可以拖動該 Activity 至屏幕突出顯示的區域,使 Activity 進入多窗口模式。
- 若用戶長按 Overview 按鈕,設備上的當前 Activity 將進入多窗口模式,同時將打開 Overview 屏幕,用戶可在該屏幕中選擇要共享屏幕的另一個 Activity。
用戶可以在兩個 Activity 共享屏幕的同時在這兩個 Activity 之間拖放數據 (在此之前,用戶只能在一個 Activity 內部拖放數據)。
針對多窗口模式配置應用
您可以對應用的 Activity 是否支持多窗口顯示和顯示方式進行配置。 您可以在 Manifest 文件中設置屬性,以控制大小和布局。 根 Activity 的屬性設置適用于其任務棧中的所有 Activity。 例如:如果根 Activity 已 android:resizeableActivity 設定為 true,則任務棧中的所有 Activity 都將可以調整大小。
android:resizeableActivity
在 Manifest 的
- android:resizeableActivity=["true" | "false"]
如果該屬性設置為 true,Activity 將能以分屏和自由形狀模式啟動。 如果此屬性設置為 false,Activity 將不支持多窗口模式。 如果該值為 false,且用戶嘗試在多窗口模式下啟動 Activity,該 Activity 將全屏顯示。
多窗口模式中被禁用的功能
在設備處于多窗口模式中時,某些功能會被禁用或忽略,因為這些功能對與其他 Activity 或應用共享設備屏幕的 Activity 而言沒有意義。 此類功能包括:
- 某些系統 UI 自定義選項將被禁用;例如:在非全屏模式中,應用無法隱藏狀態欄。
- 系統將忽略對 android:screenOrientation 屬性所作的更改。
布局屬性
(1)android:defaultWidth
以自由形狀模式啟動時 Activity 的默認寬度。
(2)android:defaultHeight
以自由形狀模式啟動時 Activity 的默認高度。
(3)android:gravity
以自由形狀模式啟動時 Activity 的初始位置。
(4)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>
以上就是 Android 畫中畫和多窗口功能的全部內容,如果您有其他的 Android 8.0 Oreo 兼容性的問題,我們非常感謝您在留言板里提出。 如果您覺得文章對身邊的人有幫助,就動手轉發吧,讓更多的人關注我們并提出意見。
【本文是51CTO專欄機構“谷歌開發者”的原創稿件,轉載請聯系原作者(微信公眾號:Google_Developers)】