Android 8.0 Oreo 畫中畫模式

谷歌開發者_發表於2017-08-25

640?wx_fmt=gif


640?wx_fmt=jpeg

Android 8.0 Oreo(API Level 26)允許活動啟動畫中畫 Picture-in-picture(PIP)模式。PIP 是一種特殊型別的多視窗模式,主要用於視訊播放。PIP 模式已經可用於 Android TV,而 Android 8.0 則讓該功能可進一步用於其他 Android 裝置。



畫中畫 Picture-in-picture(PIP)模式

640?wx_fmt=gif

當一個活動在畫中畫模式,它處於暫停狀態,但應繼續展示內容。出於這個原因,您應該確保您的應用程式不在的 onpause ( ) 中處理暫停播放。相反,您應該在 onstop ( ) 暫停播放·,在 onstart ( ) 中繼續播放。


640?wx_fmt=jpeg

指定您的活動可以使用畫中畫模式

從 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 多視窗支援

640?wx_fmt=png

△ 兩個應用在分屏模式中左右並排顯示

從 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 的 <activity> <application> 節點中設定該屬性,啟用或禁用多視窗顯示:

android:resizeableActivity=["true" | "false"]

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


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


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

  • 某些系統 UI 自定義選項將被禁用;例如:在非全屏模式中,應用無法隱藏狀態列。

  • 系統將忽略對 android:screenOrientation 屬性所作的更改。


佈局屬性


<layout> 清單元素支援以下幾種屬性,這些屬性影響 Activity 在多視窗模式中的行為:

android:defaultWidth

以自由形狀模式啟動時 Activity 的預設寬度。

android:defaultHeight

以自由形狀模式啟動時 Activity 的預設高度。

android:gravity

以自由形狀模式啟動時 Activity 的初始位置。

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>


640?wx_fmt=jpeg

以上就是 Android 畫中畫和多視窗功能的全部內容,如果您有其他的 Android 8.0 Oreo 相容性的問題,我們非常感謝您在留言板裡提出。 如果您覺得文章對身邊的人有幫助,就動手轉發吧,讓更多的人關注我們並提出意見。



推薦閱讀:

Android 8.0 Oreo 現已推出!

Android O 遷移應用官方指南

掌握 Android O 行為變更指南,參與互動贏收藏版 Android 公仔!

什麼?Android O 圖示能自適應了?!

Instant App 常見問題官方指南 | Android 開發者 FAQ Vol.6


640?wx_fmt=gif

相關文章