天天看點

android單個頁面切換_Android 劉海屏适配方案

随着iPhone X釋出,國内一些廠商也推出了劉海屏手機,即将釋出的Android p也提供了對劉海屏的支援。so,我們的app也要提前做好适配。

1

什麼是劉海屏?

螢幕的正上方居中位置(下圖黑色區域)會被挖掉一個孔,螢幕被挖掉的區域無法正常顯示内容,這種類型的螢幕就是劉海屏,也有其他叫法:挖孔屏、凹凸屏等等,這裡統一按劉海屏命名。

android單個頁面切換_Android 劉海屏适配方案

目前國内廠商已經推出的劉海屏Android手機有華為P20 pro, vivo X21,OPPO R15。

如果沒有适配劉海屏會有什麼後果?

後果一:導航欄中title被遮擋

android單個頁面切換_Android 劉海屏适配方案

未适配劉海屏1

後果二:顯示内容下移,頭部出現黑條,底部出現遮擋

android單個頁面切換_Android 劉海屏适配方案

未适配劉海屏2

2

如何适配劉海屏?

由于Android p正式版今日剛釋出, 目前市面上的Android 劉海屏手機還不能用Android 官方提供的方案來解決,那怎麼辦呢?還好幾個廠商自己給出了适配方案。我們先講理論後上代碼,如果您隻想要代碼就直接往下翻:

華為P20 pro

華為劉海屏适配官方文檔

https://devcenter-test.huawei.com/consumer/cn/devservice/doc/50114

華為給出的文檔最為詳細(業界良心),P20 pro預裝系統對未做劉海屏适配處理的app有一定處理,處理邏輯如下

android單個頁面切換_Android 劉海屏适配方案

預處理流程圖

可見,會被華為系統做偏移處理的有2種情況:

1.未設定meta-data值,頁面橫屏狀态

2.未設定meta-data值,頁面豎屏狀态,不顯示狀态欄

這2種情況都會出現後果二。如果你的app中頁面沒有這兩種情況,例如都是豎屏且顯示狀态欄,你就可以淡定地不做處理。

現在我們知道原因了就可以對症下藥了,這裡給出我推薦的解決方案(官方給出的解決方案不止一種,可以根據自己的需要采用) 分為4步:

1.配置meta-data

①對Application生效,意味着該應用的所有頁面,系統都不會做豎屏場景的特殊下移或者是橫屏場景的右移特殊處理:

android單個頁面切換_Android 劉海屏适配方案

配置在application下

② 對Activity生效,意味着可以針對單個頁面進行劉海屏适配,設定了該屬性的Activity系統将不會做特殊處理:

android單個頁面切換_Android 劉海屏适配方案

配置在Activity下

2.檢測是否存在劉海屏

public static boolean hasNotchInScreen(Context context) { boolean ret = false; try { ClassLoader cl = context.getClassLoader(); Class HwNotchSizeUtil = cl.loadClass("com.huawei.android.util.HwNotchSizeUtil"); Method get = HwNotchSizeUtil.getMethod("hasNotchInScreen"); ret = (boolean) get.invoke(HwNotchSizeUtil); } catch (ClassNotFoundException e) { Log.e("test