Android P 凹口屏支持蜓谋,打造全面屏體驗(yàn)

作者: Megan Potoski, Android 系統(tǒng)用戶(hù)界面產(chǎn)品經(jīng)理

智能手機(jī)發(fā)展至今娜亿,邊框越做越窄,屏幕中橫比越做越大廓块。而凹口屏 (又稱(chēng) "劉海屏") 更是成為各大設(shè)備廠商手中的 "神兵利器":既能讓用戶(hù)享受到全面屏體驗(yàn)厢绝,又能預(yù)留出足夠空間安裝感應(yīng)器。目前带猴,已經(jīng)有 11 家廠商相繼發(fā)布了 16 款帶有 "劉海" 設(shè)計(jì)的手機(jī)昔汉,其中部分機(jī)型為 Android P Beta 設(shè)備。預(yù)計(jì)今后會(huì)有更多凹口屏設(shè)備與消費(fèi)者見(jiàn)面拴清。

凹口屏一方面為開(kāi)發(fā)者創(chuàng)造了絕好的條件靶病,展示各自應(yīng)用的獨(dú)特魅力;另一方面口予,它又凸顯了適配的重要性娄周,不論設(shè)備擁有一個(gè)還是兩個(gè)屏幕缺口,采用的是 18:9 亦或是其它尺寸的屏幕沪停,開(kāi)發(fā)者需要保證應(yīng)用在所有設(shè)備上都能夠提供相同的用戶(hù)體驗(yàn)昆咽。

△?凹口屏設(shè)備: Essential PH-1 (左) 和華為 P20 (右)

凹口屏幕適配方案

隨著各大設(shè)備廠商陸續(xù)躋身凹口屏大軍之列,開(kāi)發(fā)者應(yīng)該如何正確應(yīng)對(duì)牙甫,確保應(yīng)用能夠快速適配呢掷酗?

好消息是:即使在凹口屏設(shè)備上,大部分應(yīng)用內(nèi)容并不會(huì)受到影響窟哺。默認(rèn)情況下泻轰,如果開(kāi)發(fā)者在豎屏模式下未對(duì)狀態(tài)欄設(shè)定任何特殊標(biāo)志位,狀態(tài)欄會(huì)根據(jù)屏幕缺口情況自行調(diào)整高度 (缺口高度 ≤ 狀態(tài)欄高度)且轨,而應(yīng)用內(nèi)容則會(huì)顯示在狀態(tài)欄以下區(qū)域浮声;在橫屏和全屏模式下虚婿,系統(tǒng)會(huì)在應(yīng)用窗口四周保留黑邊,避開(kāi)在缺口區(qū)顯示應(yīng)用內(nèi)容泳挥。

不過(guò)然痊,為避免應(yīng)用在凹口屏上出現(xiàn)適配問(wèn)題,開(kāi)發(fā)者還需注意以下幾點(diǎn):

>> 不要將狀態(tài)欄高度設(shè)置為固定值屉符,否則很容易出現(xiàn)問(wèn)題剧浸。在條件允許的情況下,可以調(diào)用 WindowInsetsCompat 獲取狀態(tài)欄高度矗钟;

>> 在全屏模式下唆香,由于系統(tǒng)在應(yīng)用周?chē)A袅撕谶叄虼水?huà)面不會(huì)占滿(mǎn)整個(gè)屏幕吨艇,此時(shí)開(kāi)發(fā)者需要謹(jǐn)慎考慮躬它,窗口坐標(biāo)或屏幕坐標(biāo)之間作出抉擇。比如說(shuō)东涡,如果您調(diào)用了 MotionEvent.getRawX/Y() 來(lái)獲取觸摸點(diǎn)觸相對(duì)于屏幕原點(diǎn)坐標(biāo)冯吓,請(qǐng)別忘了使用getLocationOnScreen() 將它們轉(zhuǎn)換為視圖坐標(biāo);

>> 請(qǐng)?zhí)貏e注意應(yīng)用在進(jìn)入和退出全屏模式時(shí)的視圖轉(zhuǎn)換問(wèn)題疮跑。

請(qǐng)查閱《屏幕缺口支持指南》组贺,了解適配過(guò)程中您可能遇到的問(wèn)題以及相應(yīng)解決方案。

靈活利用缺口區(qū)域

通過(guò)在缺口區(qū)域顯示應(yīng)用內(nèi)容祸挪,尤其是視頻、圖片贞间、地圖或者游戲一類(lèi)的內(nèi)容贿条,開(kāi)發(fā)者能夠顯著提升應(yīng)用沉浸度,為用戶(hù)打造真正的全面屏體驗(yàn)增热≌裕△?應(yīng)用請(qǐng)求在缺口區(qū)域進(jìn)行布局

△?應(yīng)用請(qǐng)求在缺口區(qū)域進(jìn)行布局

開(kāi)發(fā)者可以調(diào)用 Android P 中的相關(guān) API,判斷設(shè)備是否具有凹口屏峻仇,然后在獲取缺口的位置信息公黑,并管理內(nèi)容在缺口區(qū)域的布局。

您可以利用全新的窗口布局屬性 layoutInDisplayCutoutMode 管理應(yīng)用在凹口屏幕上的布局顯示摄咆。在默認(rèn)情況下凡蚜,只有當(dāng)缺口完全包含在狀態(tài)欄內(nèi)時(shí),系統(tǒng)才會(huì)允許應(yīng)用延伸至缺口區(qū)域吭从,否則窗口不會(huì)與缺口重疊朝蜘。此外,您可以通過(guò)更改 layoutInDisplayCutoutMode 參數(shù)涩金,讓設(shè)備始終 (或絕不) 允許應(yīng)用使用缺口區(qū)域谱醇。如果您希望利用到整個(gè)顯示區(qū)域暇仲,而且不介意缺口位置無(wú)法顯示應(yīng)用內(nèi)容,SHORT_EDGES 模式是個(gè)不錯(cuò)的選擇副渴,在該模式下奈附,系統(tǒng)始終允許應(yīng)用窗口延伸至缺口區(qū)域。

在適配過(guò)程中煮剧,您可調(diào)用 getDisplayCutout() 獲取無(wú)顯示凹口區(qū)的外邊距和包圍盒值斥滤,并利用這些數(shù)值判斷應(yīng)用內(nèi)容是否與缺口重合,以及是否需要重新調(diào)整內(nèi)容位置轿秧。

△?活動(dòng)主題中的窗口布局屬性: layoutInDisplayCutoutMode

此外中跌,我們已經(jīng)將 activity 主題中的 layoutInDisplayCutoutMode 屬性往后添加到 Android 8.1 (API 27) 的設(shè)備上,您也可以在缺口區(qū)域?qū)?yīng)用內(nèi)容進(jìn)行布局菇篡。不過(guò)若系統(tǒng)版本為 Android 8.1 或更低漩符,設(shè)備是否具有凹口屏支持則取決于廠商。

如果應(yīng)用需要針對(duì)多個(gè) API 等級(jí)進(jìn)行內(nèi)容布局驱还,您可以通過(guò) SDK manager 下載 AndroidX 庫(kù)嗜暴,并使用庫(kù)中的 DisplayCutoutCompat 來(lái)簡(jiǎn)化管理流程。

針對(duì)凹口屏測(cè)試您的應(yīng)用

強(qiáng)烈建議您對(duì)應(yīng)用的所有界面和操作進(jìn)行測(cè)試议蟆,確保應(yīng)用在凹口屏設(shè)備上能夠流暢運(yùn)行闷沥。建議您選擇一款配有凹口屏的 Android P Beta 設(shè)備作為調(diào)試設(shè)備,如 Essential PH-1咐容。

如果您暫時(shí)沒(méi)有條件進(jìn)行真機(jī)測(cè)試舆逃,您可以在非凹口屏 P 版本手機(jī)或者 Android 模擬器中,開(kāi)啟 "模擬具有凹口的顯示屏" 的設(shè)置項(xiàng)戳粒,然后再進(jìn)行調(diào)試路狮。這能幫助您發(fā)現(xiàn)應(yīng)用在凹口屏設(shè)備上運(yùn)行時(shí)可能會(huì)遇到的問(wèn)題,不論設(shè)備的系統(tǒng)版本是 Android 8.1 還是 Android P蔚约。

凹口屏幕全知道

Android P 中引入了對(duì)凹口屏幕的官方平臺(tái)支持奄妨,同時(shí)提供了一系列 API 幫助開(kāi)發(fā)者在缺口區(qū)內(nèi)外對(duì)應(yīng)用內(nèi)容進(jìn)行布局。為了保障一致性與應(yīng)用兼容性苹祟,我們目前正在與設(shè)備合作伙伴展開(kāi)積極合作砸抛,攜手制定相關(guān)行業(yè)標(biāo)準(zhǔn)。

首先树枫,廠商需要確保設(shè)備的凹口屏幕不會(huì)對(duì)應(yīng)用造成不良影響直焙,這涉及到以下兩項(xiàng)關(guān)鍵要求:

>> 在豎屏模式下,若沒(méi)有設(shè)定特殊標(biāo)志位砂轻,狀態(tài)欄高度必須大于或等于缺口高度箕般;

>> 在全屏或橫屏模式下,缺口區(qū)域必須整個(gè)落在黑色填充區(qū)內(nèi)舔清。

第二點(diǎn)丝里,屏幕每條短邊上缺口數(shù)量不可超過(guò) 1曲初,即:

>> 不允許一條短邊上存在 2 個(gè)或 2 個(gè)以上缺口,即每臺(tái)設(shè)備最多擁有 2 個(gè)屏幕缺口杯聚;

>> 不允許在屏幕左側(cè)或右側(cè)出現(xiàn)缺口臼婆。

在滿(mǎn)足以上條件的前提下,廠商可以按照各自需求幌绍,設(shè)計(jì)缺口位置和形狀颁褂。

特殊模式

在某些運(yùn)行 Android 8.1 (API 等級(jí) 27) 或更早版本的設(shè)備上,用戶(hù)可以通過(guò)開(kāi)啟 "特殊模式"傀广,允許系統(tǒng)在全屏或橫屏模式下延伸應(yīng)用窗口至缺口區(qū)域颁独。用戶(hù)一般可以在導(dǎo)航欄中找到并勾選該模式,接著系統(tǒng)會(huì)彈出一個(gè)確認(rèn)對(duì)話(huà)框伪冰,在征得用戶(hù)同意后誓酒,模式才會(huì)正式生效。

△?提供 "特殊模式" 選項(xiàng)的設(shè)備允許用戶(hù)將應(yīng)用窗口延伸至缺口區(qū)域 (若應(yīng)用支持在缺口區(qū)域顯示)

如果應(yīng)用的 targetSdkVersion 為 27 或更高贮聂,在必要時(shí)您可以通過(guò)更改活動(dòng)主題中的layoutInDisplayCutoutMode 屬性靠柑,退出特殊模式。

別忘了: 為長(zhǎng)屏幕設(shè)備做好準(zhǔn)備

在適配凹口屏的同時(shí)吓懈,您不妨考慮一下如何確保應(yīng)用在長(zhǎng)屏幕設(shè)備上 (縱橫比大于或等于 18:9) 也能夠正常運(yùn)行歼冰,尤其是現(xiàn)在市面上長(zhǎng)屏手機(jī)越來(lái)越多,而且這些設(shè)備往往同時(shí)還采用了凹口屏設(shè)計(jì)耻警。

強(qiáng)烈建議您選擇靈活的適配方案隔嫡,確保應(yīng)用不受運(yùn)行設(shè)備所限,高效利用全部顯示區(qū)域甘穿。您可以針對(duì)不同屏幕尺寸進(jìn)行相應(yīng)的兼容性測(cè)試腮恩,以確保應(yīng)用在功能和視圖方面都表現(xiàn)良好。

建議查閱《長(zhǎng)屏幕設(shè)備適配指南》《如何針對(duì)長(zhǎng)屏幕設(shè)備優(yōu)化您的應(yīng)用》一文中列出的幾項(xiàng)建議扒磁,進(jìn)行相應(yīng)開(kāi)發(fā)庆揪。如果您的應(yīng)用無(wú)法適應(yīng)長(zhǎng)屏幕的縱橫比式曲,您可以通過(guò)設(shè)置應(yīng)用的最大支持縱橫比妨托,要求系統(tǒng)用黑色填充應(yīng)用邊緣的顯示空間。

希望以上內(nèi)容能對(duì)您有所幫助吝羞,讓您不懼 "劉海"兰伤,只為更好體驗(yàn)!

點(diǎn)擊這里?"我們?cè)敢飧玫貎A聽(tīng)您的聲音 "

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末钧排,一起剝皮案震驚了整個(gè)濱河市敦腔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恨溜,老刑警劉巖符衔,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件找前,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡判族,警方通過(guò)查閱死者的電腦和手機(jī)躺盛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)形帮,“玉大人槽惫,你說(shuō)我怎么就攤上這事”绯牛” “怎么了界斜?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)合冀。 經(jīng)常有香客問(wèn)我各薇,道長(zhǎng),這世上最難降的妖魔是什么水慨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任得糜,我火速辦了婚禮,結(jié)果婚禮上晰洒,老公的妹妹穿的比我還像新娘朝抖。我一直安慰自己,他們只是感情好谍珊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布治宣。 她就那樣靜靜地躺著,像睡著了一般砌滞。 火紅的嫁衣襯著肌膚如雪侮邀。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天贝润,我揣著相機(jī)與錄音绊茧,去河邊找鬼。 笑死打掘,一個(gè)胖子當(dāng)著我的面吹牛华畏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尊蚁,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼亡笑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了横朋?” 一聲冷哼從身側(cè)響起仑乌,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后晰甚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體衙传,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年厕九,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粪牲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡止剖,死狀恐怖腺阳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情穿香,我是刑警寧澤亭引,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站皮获,受9級(jí)特大地震影響焙蚓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洒宝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一购公、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雁歌,春花似錦宏浩、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至乏盐,卻和暖如春佳窑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背父能。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工神凑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人何吝。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓溉委,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親岔霸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子薛躬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,144評(píng)論 25 707
  • 一葉花開(kāi)的情懷俯渤,一縷花香的飄逸呆细, 一抹清風(fēng)喚月,一場(chǎng)細(xì)雨染翠, 那走遠(yuǎn)了的悠悠歲月絮爷,那窗外偷偷溜走的時(shí)光趴酣, 心底那...
    楓淚_22e5閱讀 331評(píng)論 0 0
  • 有一天,我去世了坑夯,恨我的人岖寞,翩翩起舞,愛(ài)我的人柜蜈,眼淚如露仗谆。 第二天,我的尸體頭朝西埋在地下深處淑履,恨我的人隶垮,看著我的...
    潸然淚閱讀 230評(píng)論 0 0
  • 目標(biāo):愿理想伴侶早日與我在一起,微課堂秘噪、小海鮮生意大賣(mài)狸吞。 感恩冥想: 1、感恩今天早上陪媽媽?zhuān)彩菋寢屌惆槲抑讣澹覀?..
    小兔兔姐姐愛(ài)吃胡蘿卜閱讀 107評(píng)論 0 0
  • 漂流 ■劉漢皇 . 在黑夜和白晝之間漂流 生與死之間漂流 童年到中年的漂流 . 啟明星自地平線以上的往復(fù)漂流 大地...
    劉漢皇閱讀 411評(píng)論 4 24