Android 凹口屏啟動(dòng)界面適配

今天 Google 正式發(fā)布了 Android 9 Pie,所以也著手把應(yīng)用的 Target Version 升級(jí)到 API 28胎源,現(xiàn)在凹口屏 (又稱 "劉海屏") 的 Android 手機(jī)越來越多愧杯,Google 也是為了滿足各手機(jī)廠商這個(gè)發(fā)展趨勢(shì)提供了相應(yīng)的 API椎组。

我們可以參考 Google 的這篇 Android P 凹口屏支持培愁,打造全面屏體驗(yàn)
提到的凹口屏幕適配方案凉倚。也可以請(qǐng)查閱官方文檔《屏幕缺口支持指南》坊饶,了解適配過程中可能遇到的問題以及相應(yīng)解決方案却桶。

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

我們先來看看我的應(yīng)用在沒有適配凹口屏?xí)r的啟動(dòng)界面:
應(yīng)用界面上方存在一條大黑邊:

適配前啟動(dòng)界面

下面就來說說我在實(shí)際適配凹口屏 Android 手機(jī)的過程:

1. 開啟顯示凹口模式

如果你沒有凹口屏的真機(jī)碱呼,也可以在非凹口屏 P 版本手機(jī)或者 Android 模擬器中蒙挑,開啟 "模擬具有凹口的顯示屏" 的設(shè)置項(xiàng),然后再進(jìn)行調(diào)試愚臀。

2. 適配長(zhǎng)屏幕的全面屏

我們首先要確保應(yīng)用在長(zhǎng)屏幕設(shè)備上 (縱橫比大于或等于 18:9) 也能夠正常運(yùn)行忆蚀,尤其是現(xiàn)在市面上長(zhǎng)屏手機(jī)越來越多,而且這些設(shè)備往往同時(shí)還采用了凹口屏設(shè)計(jì)姑裂。
當(dāng)我們的應(yīng)用布局無法適應(yīng)任意大的寬高比馋袜,可以通過設(shè)置最大寬高比來聲明,Google 建議這個(gè)最大比率為 2.4(12:5)

  • 在 Android 8.0(API 26)及更高版本中舶斧,我們可以在 <activity> 標(biāo)簽中使用 android:MaxAspectRatio 來聲明其支持的屏幕最大寬高比欣鳖。比如我們可以聲明最大寬高比為 2.4:
<!-- Render on full screen up to screen aspect ratio of 2.4 -->
<!-- Use a letterbox on screens larger than 2.4 -->
<activity android:maxAspectRatio="2.4">
 ...
</activity>
  • 對(duì)于Android 7.1及更低版本,我們可以在 <application> 元素中添加名為 android.max_aspect 的 <meta-data> 元素茴厉,如下所示:
<!-- Render on full screen up to screen aspect ratio of 2.4 -->
<!-- Use a letterbox on screens larger than 2.4 -->
<meta-data android:name="android.max_aspect" android:value="2.4" />

注意:如果設(shè)置了最大寬高比泽台,請(qǐng)不要忘記也設(shè)置 android:resizeableActivity false什荣。否則,最大寬高比無意義怀酷。

這是因?yàn)閺?Android 7.0 開始稻爬,應(yīng)用的多窗口模式變?yōu)槟J(rèn)啟動(dòng)。在多窗口模式下蜕依,默認(rèn)你的應(yīng)用已經(jīng)進(jìn)行了全面屏適配桅锄,如果我們不想應(yīng)用在多窗口模式下運(yùn)行,可以修改以下屬性:

android:resizeableActivity="false"

3. 適配凹形屏幕

Google 為劉海屏顯示方式提供了三種顯示模式:

// 默認(rèn)情況样眠,全屏頁面不可用劉海區(qū)域友瘤,非全屏頁面可以進(jìn)行使用
public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT = 0;
// 允許頁面延伸到劉海區(qū)域
public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES = 1;
// 不允許使用劉海區(qū)域
public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER = 2;

我們可以通過下面兩種方式來指定應(yīng)用在凹形屏幕的顯示模式:

  • 在主題中加入android:windowLayoutInDisplayCutoutMode 屬性指定顯示模式:
// value-v28/styles.xml
 <style name="AppTheme.Launcher" parent="AppTheme">
        <item name="android:windowBackground">@drawable/branded_launch_screens</item>
        <item name="android:statusBarColor">@color/colorPrimary</item>
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
  • 通過在代碼中指定 Activity 的顯示模式

我們可以在 Activity 的 onCreate 中指定凹形屏幕的顯示模式:

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (Build.VERSION.SDK_INT >= 28) {
            WindowManager.LayoutParams lp = getWindow().getAttributes();
            lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
            getWindow().setAttributes(lp);
        }
}

最終效果:

適配后的啟動(dòng)界面
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市檐束,隨后出現(xiàn)的幾起案子辫秧,更是在濱河造成了極大的恐慌,老刑警劉巖厢塘,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茶没,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡晚碾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門喂急,熙熙樓的掌柜王于貴愁眉苦臉地迎上來格嘁,“玉大人,你說我怎么就攤上這事廊移「獠荆” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵狡孔,是天一觀的道長(zhǎng)懂诗。 經(jīng)常有香客問我,道長(zhǎng)苗膝,這世上最難降的妖魔是什么殃恒? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮辱揭,結(jié)果婚禮上离唐,老公的妹妹穿的比我還像新娘。我一直安慰自己问窃,他們只是感情好亥鬓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著域庇,像睡著了一般嵌戈。 火紅的嫁衣襯著肌膚如雪覆积。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天熟呛,我揣著相機(jī)與錄音技健,去河邊找鬼。 笑死惰拱,一個(gè)胖子當(dāng)著我的面吹牛雌贱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播偿短,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼欣孤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了昔逗?” 一聲冷哼從身側(cè)響起降传,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勾怒,沒想到半個(gè)月后婆排,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡笔链,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年段只,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鉴扫。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赞枕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坪创,到底是詐尸還是另有隱情炕婶,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布莱预,位于F島的核電站柠掂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏依沮。R本人自食惡果不足惜涯贞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悉抵。 院中可真熱鬧肩狂,春花似錦、人聲如沸姥饰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽列粪。三九已至审磁,卻和暖如春谈飒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背态蒂。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工杭措, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钾恢。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓手素,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親瘩蚪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泉懦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

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