Android Q Labs| 摺疊屏設備適配

從去年的下半年開始,咱們看到Android的設備製造商們又打造出了一個新的類別:摺疊屏手機。這種設備的屏幕利用了全新的柔性屏技術,能夠真正的實現彎曲和摺疊。chrome

可摺疊屏設備現狀

簡單的來講咱們能夠根據在摺疊狀態下柔性屏所處的位置,將目前市面上的摺疊屏手機分爲兩大類別。安全

摺疊手機分類

Fold in

首先是Fold in。app

就是在摺疊的時候,它的柔性屏是處於摺疊的內部的,咱們看到屏幕上的第一個圖片,仔細看的話是在它的摺疊的裏面是能看到有顯示的內容的。這種設備當它在摺疊以後,它的外部是有一塊額外的非柔性屏幕,這個屏幕就很適合用戶作一些比較簡單的,須要快速響應的操做。佈局

Fold out

第二個類別叫Fold out。post

當他在摺疊的時候,它的柔性屏仍是在摺疊的外部的,它在摺疊狀態下,柔性屏是隻有其中部分區域是繼續使用的,它的部分區域也能夠把它當成一個普通的折普通的顯示屏來使用。 測試

在去年11月份,咱們舉辦了每一年一度的 Android 開發者峯會,在開發者峯會上咱們就宣佈了 Android 系統會對摺疊屏設備提供原生支持。這也就意味着若是你在開發應用的時候,遵循了咱們推薦的最佳實踐作法去實現你的應用,那麼你的應用不須要作任何更改就能在這些新型的設備上運行起來。網站

咱們這裏所指的最佳實踐就包括有說你的 Activity 是否可以根據當前屏幕大小去本身調整本身的大小,以及是否正確地處理了配置變化,還有當配置發生變化的時候,你是否能保存並恢復到用戶以前所在的狀態等等。 google

在這些新的摺疊屏手機上,若是你想達到良好,甚至是極佳的用戶體驗,在設計和實現的時候,就有一些須要特別關注的地方。

使用摺疊屏手機的體驗

  1. 首先是在摺疊屏手機被摺疊的狀況下,基本上你能夠認爲它跟一個普通的手機是差很少的使用體驗,適合單手操操做適合,同時很方便你去作一些快速的響應,好比說接聽電話回覆消息等等。設計

  2. 當摺疊屏手機展開的時候,它一般是一塊有7到8英寸的大屏幕,使用起來的體驗很是接近於平板設備。這麼大的一塊屏幕。針對於這樣一個大屏幕,你的應用選擇什麼樣的佈局就很是重要,咱們鼓勵開發者在這利用好這麼大的一個顯示區域,不要利用當中的任何一個像素。3d

  3. 在展開的柔性大屏幕上,它相對於普通的手機屏幕也更適合進行分屏展現。 在使用50:50的分屏展現的狀況下,它的使用體驗就相似於將兩個普通的手機並列放在一塊兒的展現體驗。

UX 考慮

咱們看到有的摺疊屏手機它能夠同時支持三個應用,同時顯示 Android 的開發者對於16:9和18:9的長寬比都已經很熟悉了。可是摺疊屏手機的出現又帶來了一些新的長屏幕長寬比。如今做爲開發者也是時候去考慮一下你的應用在這些新出現的長寬比的屏幕上,它的展現效果是什麼樣的?新的長寬比多是21:9,甚至更高更長的瘦長形的屏幕,也多是接近長方,而接近正方形,也就是1:1長寬比的矮胖型的顯示屏。 在展開狀態下的摺疊屏幕,咱們但願你們能把對屏幕的使用用到極致。

固然咱們也知道在某些特殊的狀況下,做爲應用的開發者,你可能須要去設置應用所能夠支持的最大最小長寬比。那麼在這種時候,你可使用從 Android 8.0引入的 maxAspectRatio 去設置最大可支持長寬比。 也可使用咱們在AndroidQ上新加入的minAspectRatio去設置你所能支持的最小長寬比。

咱們不只是對開發者有一些要求,咱們對於生產摺疊屏設備的 OEM 也有一些明確的要求。 咱們但願 OEM 能夠保證在不一樣的設備,應用程序都能有足夠的空間容納底部導航欄中最多同時有五個圖標同時顯示,以及能有一個溫馨的鍵盤輸入區域。具體來講就是咱們要求oem保證設備的最小觸摸目標大小是兩英寸。

應用聯繫性

什麼是應用連續性呢?在可摺疊設備上,當用戶摺疊或展開摺疊屏幕的時候,應用就會被從一個屏幕自動切換到另外一個屏幕上去展現。在切換髮生的時候,系統會嚮應用發送 ConfigurationChange。 爲了不你的用戶的體驗由於應用屏幕的切換而受到影響,但願開發者能確保你的應用可以妥善的處理運行時的配置變動。

具體來講就是你須要特別去關注如下幾個方面:

首先是爲你的應用選擇合適的佈局

第二是要注意到要注意能恢復到以前用戶所在的位置。好比說在切換前你的界面上它是帶有滾動條的,那麼在屏幕切換以後,剛剛用戶滾動到哪裏,你的應用最好還能保證滾動條處於切換前的同一個位置。

Multi-window

關於 resizeableActivity 屬性,它是從 Android 7.0伴隨着 multi—window 一塊兒引入的。開發者能夠在應用的 manifast 文件裏面爲 activity 和application 去設置屬性。

這個屬性代表的是 activity 和 application 是否可以啓用或者禁用多窗口顯示?若是這個屬性的值設置爲 true,表示 activity 可以以分屏和自由形狀模式啓動,若是屬性設置爲 false,並非說你的 activity 就絕對不會被調整大小,實際上它表示的是 activity 它不能支持多窗口模式。若是這個值被設置爲 false,且用戶嘗試在多窗口模式下去啓動,那麼 activity 就會被以全屏方式展現給用戶,

對於那些既不能支持 multi-window,也不能支持屏幕旋轉的應用,咱們會經過兼容模式來進行展現。這裏的兼容模式指的是將應用作拉伸以後,全部應用覆蓋不到的區域會使用黑色部分填充,這種模式也叫作 black box 模式。

爲了應用能有更好的用戶體驗,咱們固然不但願開發者的應用被使用 black box 模式進行展現。咱們建議開發者將 resizeableActivity 屬性來設置爲 true,並選擇合適的應用佈局,從而來在多窗口模式下有一個比較好的用戶體驗。

在摺疊屏手機出現之前,其實 Multi-Window 的概念就已經被引入了。其中有一個如今的用戶比較熟悉的情況,就是在手機上的分屏顯示。若是你的設備是一個 O 或者 P 的設備的話,你相信你應該早已在你的設備上嘗試過這種分屏模式。

在Android以前,雖然屏幕上可能同時會有多個 activity 顯示,可是同一時間最多隻可能會有一個 resume 狀態。若是當前界面當前屏幕上有多個 activity 顯示,那麼實際上只有其中具備焦點的 activity,他才處於 resume 模式,而其餘的應用雖然可見,但實際他們的狀態都是屬於處於 PAUSED 狀態。雖然咱們在開發者網站上的多窗口支持的文章裏提供了處理同屏多應用的實現方法,可是咱們發現絕大多數的應用開發者並無根據咱們的最佳實踐推薦的方法來處理 onPAUSED 狀態。

當多個應用程序都處於 resume 這種狀態的時候,很明顯對於一些系統的獨佔性資源,好比說攝像頭和麥克風確定不可能這多個應用均可以去同時訪問,那麼其中的一些應用程序就會失去對這些獨佔性系統資源的使用權。應用能夠經過可用性變化的回調來處理這種狀況。這裏以攝像頭爲例。
咱們還在 Android 裏面爲 Activity 添加了一個新的狀態叫 topResumed。由於咱們剛剛提到在 Q 以前的系統版本上,同一時間只會有一個 activity 處於 resume 這種狀態。因此在 Q 上新增的 topResumed 這種狀態下你能夠認爲它基本上是等同於在 Q 以前的版本上的 resume 狀態的。
隨着 multi-window的狀況愈來愈常見,咱們發如今以前的系統版本上一些不太可能出現的操做如今也變得可能了,好比說以前在手機操做上,一般不會有用戶須要將一段文字或者是一個圖片從一個應用裏拖放到另外一個應用裏的狀況。可是隨着多窗口狀態的出現,極可能用戶就會有這種需求。若是你的應用恰巧是一個有可能出現這種用戶場景的應用,那麼咱們建議你如今就應該可去考慮是否對你的應用增長對文本和圖片的拖放處理。
咱們具體來看一下 Activity 的切換。實際上有不少種方式能夠把一個 Activity 從一個顯示屏切換到另外一個顯示屏。以摺疊手機爲例來講,就是當用戶摺疊或者展開手機設備的時候,Activity 就可能在屏幕之間發生移動。在全部的安卓平臺版本上,從啓動器或者系統均可以按期啓動,在輔助屏幕上建立一個新的 Activity 實例,或者他也能夠從一個顯示器中被移動到另一個顯示器中,這個行爲是取決於在你的應用的安卓 menifast 裏面定義的 Activity 的 launch mod 以及啓動 Activity 的調用者設置的英特的標誌和選項。

當 Activity 被移動到不一樣的顯示設備的時候,你須要記住如下三種變動可能會發生。

在大多數狀況下,開發者都會有預期說不一樣的顯示器他們會有不一樣的尺寸密度和分辨率,那麼這也意味着若是你的應用聲明瞭他能夠去處理運行時的配置變動,他就要可以對這些可能不一樣的配置都要去進行處理。
若是你聲明你的 Activity 它的啓動模式能夠支持多個實例並存,那麼當它在輔助屏幕上啓動的時候,就會建立一個新的 Activity 體實例。這裏演示的是調用者請求在第二個顯示器,也就是手機鏈接的外置顯示屏上使用 new task 和 multitask 這兩個標誌去啓動一個新的 Activity,這裏就會建立一個新的 chrome 窗口。
咱們但願應用開發者可以去檢查你的應用是否能支持這種多實力的情況,若是你肯定能夠支持,那麼你還須要去考慮使用具備多個 view model 的共享數據源。 Multi-resume 就也適用於多屏幕的這個場景,而且多個 Activity 可能同時能夠接受用戶輸入,你須要注意的一點是,即便在之前的平臺版本當中處於未聚焦狀態,Activity 可能能夠接受輸入。好比說當用戶嘗試同時在分屏模式中與兩個應用進行交互的時候,就會發生這種情況。

若是你的應用但願去顯示鏈接到當前的系統的額外的顯示屏幕怎麼辦?第一部是經過使用 DisplayManager 去檢查當前鏈接到當前系統中的全部顯示內容。不一樣的顯示器可能會具備不一樣的特徵,你能夠去調用接口去檢查每個顯示設備的指標信息標誌還有狀態,並確認你是否須要去使用這些顯示設備。

好比說當你但願去展現一個高清的照片的話,你就能夠先作一個過濾,去挑選出那些屏幕尺寸比較大,resolution 比較高的那些屏幕來展現這個圖片。固然還有一種狀況就是你能夠去判斷當前的這些連上的顯示設備是否關掉,由於關掉的狀況下對你來講沒有什麼價值,因此你能夠直接將他們過濾掉。

有的時候系統會限制某些屏幕上 Activity 被啓動,這種狀況下,若是你在這些設備上去啓動 Activity 就會拋出一個 security assumption。在 Android Q 上咱們還添加了一個新的 API 來檢查當前的安全限制,是說這個屏幕是否容許調用者在它上面去啓動一個 Activity 固然你也可使用 Android O當中添加的 Activity option 在你所想要的顯示設備上去啓動你的 Activity。
在Android Q 上軟件鍵盤窗口能夠被顯示,也能夠被移動到輔助顯示器當中。可是同一時 間系統仍然是隻能有一個軟件鍵盤窗口。在這個軟件鍵盤窗口被移動到不一樣的顯示器上的時候,處理方式與顯示尺寸變動,好比說屏幕旋轉的狀況下的處理方式是相似的,系統會向鍵盤進程發送顯示配置更改信息,而且在運行時更新上下文和可用資源。
從Android Q 開始輔助屏幕上也能夠去支持桌面壁紙了!Android frame work 會爲每個顯示屏建立一個單獨的 WallpapeSrurvive.Engine 實例,而且會保證每一個引擎的是表面都是獨立繪製的。
若是你是一個壁紙的開發人員,你須要確保你使用正確的 display contacts 去加載資源,你還能夠在 wallpaper info 的 xml 定義中去聲明對多顯示設備的支持。對於 Android Q 當中的啓動器,咱們爲他在 intent 的過濾器添加一個新的類別,以便爲輔助屏幕提供專用的 Activity,這個專用 Activity 的實例將用於支持 system decoration 的全部顯示器,每一個顯示器都具備單獨的一個。這個 Activity 必須具備支持多個實例的啓動模式,並且須要能夠適用不一樣適應不一樣的屏幕大小,用戶能夠去自主的設置他們。

Multi-display

在 AOSP 當中的 launchers 這個類就實現了專有 Activity 類別。那麼咱們在 AOSP 當中還有一個 multi-display 的啓動器事例,展現瞭如何去使用新的功能。

如何測試

咱們也知道對於開發者來講,在如今你想擁有一個真實的摺疊屏手機設備去測試你的應用的表現仍是挺難的。咱們在 Android studio 當中也提供了一些方案,幫你們去處理這種狀況。

若是你如今有 Android studio3.5,你能夠在 AVD 當中去看到,咱們如今提供了7.3英寸和八英寸的摺疊屏設備的模擬器,若是從此咱們看到有其餘尺寸的摺疊屏手機上市,咱們也會在 AVD 裏面增長相應的模擬器尺寸的選項。
經過這些模擬器,你如今就能夠當即開始測試你的應用,在這些最新的摺疊屏手機上的用戶體驗,你甚至能夠去模擬摺疊屏手機被摺疊和打開的狀況來測試你的應用程序的連續性。若是你的應用他聲明瞭本身所能支持的最大或者最小長寬比,你如今還能夠經過模擬器去看到在 lock box 模式下你的應用的呈現效果。固然你也能夠經過模擬器去測試 multi-resume 這種狀態下你的應用程序的表現。
爲了幫助開發者可以在真實的設備上去測試 multi-display 的展現效果,在 Android Q 中咱們還增添了一個新的開發者選項,叫強制使用桌面模式。 在這個選項被開啓以後,它會在全部的輔助屏幕上顯示 system decoration,好比說是系統頂部的狀態欄和底部的虛擬導航欄,而且會在輔助顯示屏幕上顯示主鼠標指針。經過與啓用可自由調整的可自由調整的窗口,這個選項的結合,它能夠建立出相似於桌面的窗口體驗。這兩個開發者選項的變動一般是須要從新啓動手機設備纔會生效的。

開發者文檔

咱們還在開發者網站上有一個很是詳細的教程來跟你們介紹,如何去適配這些摺疊屏手機設備。你們能夠經過掃描如今屏幕上的二維碼去閱讀教程,那麼咱們也但願你們可以儘快的實現你的應用與這些摺疊屏手機的適配工做。

點擊:開發者文檔

Android Q Labs 直播專題頁面

Android Q Labs 開場演講

Android Q 有哪些更新

Android Q 現代化您的應用

後臺 Activity 啓動的限制

Android Q 分區存儲

Android Q 手勢導航

Jetpack 更新

通用系統映像介紹

Google Play 商店政策

Android Q 地理位置權限變動

Android Q 深色主題

Android Q Labs 總結演講

相關文章
相關標籤/搜索