Android 8.0 Oreo 畫中畫模式

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