作者: Megan Potoski, Android 系統使用者介面產品經理
智慧手機發展至今,邊框越做越窄,螢幕中橫比越做越大。而凹口屏 (又稱 "劉海屏") 更是成為各大裝置廠商手中的 "神兵利器":既能讓使用者享受到全面屏體驗,又能預留出足夠空間安裝感應器。目前,已經有 11 家廠商相繼釋出了 16 款帶有 "劉海" 設計的手機,其中部分機型為 Android P Beta 裝置。預計今後會有更多凹口屏裝置與消費者見面。
凹口屏一方面為開發者創造了絕好的條件,展示各自應用的獨特魅力;另一方面,它又凸顯了適配的重要性,不論裝置擁有一個還是兩個螢幕缺口,採用的是 18:9 亦或是其它尺寸的螢幕,開發者需要保證應用在所有裝置上都能夠提供相同的使用者體驗。
凹口螢幕適配方案
隨著各大裝置廠商陸續躋身凹口屏大軍之列,開發者應該如何正確應對,確保應用能夠快速適配呢?
好訊息是:即使在凹口屏裝置上,大部分應用內容並不會受到影響。預設情況下,如果開發者在豎屏模式下未對狀態列設定任何特殊標誌位,狀態列會根據螢幕缺口情況自行調整高度 (缺口高度 ≤ 狀態列高度),而應用內容則會顯示在狀態列以下區域;在橫屏和全屏模式下,系統會在應用視窗四周保留黑邊,避開在缺口區顯示應用內容。
不過,為避免應用在凹口屏上出現適配問題,開發者還需注意以下幾點:
- 不要將狀態列高度設定為固定值,否則很容易出現問題。在條件允許的情況下,可以呼叫 WindowInsetsCompat 獲取狀態列高度;
- 在全屏模式下,由於系統在應用周圍保留了黑邊,因此畫面不會佔滿整個螢幕,此時開發者需要謹慎考慮,視窗座標或螢幕座標之間作出抉擇。比如說,如果您呼叫了 MotionEvent.getRawX/Y() 來獲取觸控點觸相對於螢幕原點座標,請別忘了使用getLocationOnScreen() 將它們轉換為檢視座標;
- 請特別注意應用在進入和退出全屏模式時的檢視轉換問題。
請查閱《螢幕缺口支援指南》,瞭解適配過程中您可能遇到的問題以及相應解決方案。
靈活利用缺口區域
通過在缺口區域顯示應用內容,尤其是視訊、圖片、地圖或者遊戲一類的內容,開發者能夠顯著提升應用沉浸度,為使用者打造真正的全面屏體驗。
開發者可以呼叫 Android P 中的相關 API,判斷裝置是否具有凹口屏,然後在獲取缺口的位置資訊,並管理內容在缺口區域的佈局。您可以利用全新的視窗布局屬性 layoutInDisplayCutoutMode 管理應用在凹口螢幕上的佈局顯示。在預設情況下,只有當缺口完全包含在狀態列內時,系統才會允許應用延伸至缺口區域,否則視窗不會與缺口重疊。此外,您可以通過更改 layoutInDisplayCutoutMode 引數,讓裝置始終 (或絕不) 允許應用使用缺口區域。如果您希望利用到整個顯示區域,而且不介意缺口位置無法顯示應用內容,SHORT_EDGES 模式是個不錯的選擇,在該模式下,系統始終允許應用視窗延伸至缺口區域。
在適配過程中,您可呼叫 getDisplayCutout() 獲取無顯示凹口區的外邊距和包圍盒值,並利用這些數值判斷應用內容是否與缺口重合,以及是否需要重新調整內容位置。
此外,我們已經將 activity 主題中的 layoutInDisplayCutoutMode 屬性往後新增到 Android 8.1 (API 27) 的裝置上,您也可以在缺口區域對應用內容進行佈局。不過若系統版本為 Android 8.1 或更低,裝置是否具有凹口屏支援則取決於廠商。如果應用需要針對多個 API 等級進行內容佈局,您可以通過 SDK manager 下載 AndroidX 庫,並使用庫中的 DisplayCutoutCompat 來簡化管理流程。
針對凹口屏測試您的應用
強烈建議您對應用的所有介面和操作進行測試,確保應用在凹口屏裝置上能夠流暢執行。建議您選擇一款配有凹口屏的 Android P Beta 裝置作為除錯裝置,如 Essential PH-1。
如果您暫時沒有條件進行真機測試,您可以在非凹口屏 P 版本手機或者 Android 模擬器中,開啟 "模擬具有凹口的螢幕" 的設定項,然後再進行除錯。這能幫助您發現應用在凹口屏裝置上執行時可能會遇到的問題,不論裝置的系統版本是 Android 8.1 還是 Android P。凹口螢幕全知道
Android P 中引入了對凹口螢幕的官方平臺支援,同時提供了一系列 API 幫助開發者在缺口區內外對應用內容進行佈局。為了保障一致性與應用相容性,我們目前正在與裝置合作伙伴展開積極合作,攜手製定相關行業標準。
首先,廠商需要確保裝置的凹口螢幕不會對應用造成不良影響,這涉及到以下兩項關鍵要求:
- 在豎屏模式下,若沒有設定特殊標誌位,狀態列高度必須大於或等於缺口高度;
- 在全屏或橫屏模式下,缺口區域必須整個落在黑色填充區內。
第二點,螢幕每條短邊上缺口數量不可超過 1,即:
- 不允許一條短邊上存在 2 個或 2 個以上缺口,即每臺裝置最多擁有 2 個螢幕缺口;
- 不允許在螢幕左側或右側出現缺口。
在滿足以上條件的前提下,廠商可以按照各自需求,設計缺口位置和形狀。
特殊模式
在某些執行 Android 8.1 (API 等級 27) 或更早版本的裝置上,使用者可以通過開啟 "特殊模式",允許系統在全屏或橫屏模式下延伸應用視窗至缺口區域。使用者一般可以在導航欄中找到並勾選該模式,接著系統會彈出一個確認對話方塊,在徵得使用者同意後,模式才會正式生效。
如果應用的 targetSdkVersion 為 27 或更高,在必要時您可以通過更改活動主題中的layoutInDisplayCutoutMode 屬性,退出特殊模式。別忘了: 為長螢幕裝置做好準備
在適配凹口屏的同時,您不妨考慮一下如何確保應用在長螢幕裝置上 (縱橫比大於或等於 18:9) 也能夠正常執行,尤其是現在市面上長屏手機越來越多,而且這些裝置往往同時還採用了凹口屏設計。
強烈建議您選擇靈活的適配方案,確保應用不受執行裝置所限,高效利用全部顯示區域。您可以針對不同螢幕尺寸進行相應的相容性測試,以確保應用在功能和檢視方面都表現良好。
建議查閱《長螢幕裝置適配指南》和《如何針對長螢幕裝置優化您的應用》一文中列出的幾項建議,進行相應開發。如果您的應用無法適應長螢幕的縱橫比,您可以通過設定應用的最大支援縱橫比,要求系統用黑色填充應用邊緣的顯示空間。
希望以上內容能對您有所幫助,讓您不懼 "劉海",只為更好體驗!
點選這裡 "我們願意更好地傾聽您的聲音 "