1 適配Android劉海屏小結
一、沉浸式與非沉浸式來回切換頁面適配
二、沉浸式頁面適配
(非沉浸式頁面,系統自動適配)
不進行任何適配的情況下,帶有劉海屏的手機都會有一套基本一致的處理邏輯。

一、沉浸式與非沉浸式來回切換頁面適配
閱讀正文界面

1、 存在問題: 正文頁面在閱讀的時候是沉浸式的(無菜單,狀態欄), 由於沉浸式的時候, 系統的策略是劉海旁邊為黑色(屏幕高度此時不算劉海旁邊區域高度), 點擊正文空白區域, 顯示菜單的時候(顯示狀態欄,這時候為非沉浸式,屏幕高度算劉海旁邊區域高度), 導致屏幕高度老是變化, 閱讀器sdk會重新對章節,按屏幕高度重新排版。 所以看書界面會經常顯示加載中。
2、蝸牛閱讀正文適配: 使用假狀態欄(一直不顯示真狀態欄,一直為沉浸式, 高度不會變化)
3、雲閱讀解決:
使用了文漫工具類, 劉海檢測Util (DisplayCutoutUtil . hasDisplayCutout()是否為劉海屏 ,. displayCutoutRect()獲取劉海屏的劉海矩形區域)。
4、雲閱讀書籍正文策略:
先檢測是否是劉海屏幕
1、如果不是劉海屏幕——> 不改變
2、如果是劉海屏幕 ——>
方案一: 簡單方案( 很簡單, 暫時使用這個方式)

a、 讓狀態欄長期顯示 (反正不顯示也是黑色的), 不設置getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)(全屏模式), 菜單切換也不動FLAG_FULLSCREEN
b、a步驟完成,發現正文頂上去了

調整MainView頂部的paddingtop 為 原來的 paddingtop + 劉海的區域的高度

方案二: 針對不同的手機,對其進行適配 (比較麻煩,暫時放棄)

已公布實現方案的廠商(適配方式基本是通過反射調用特有方法/獲取系統屬性來判斷),包括華為、小米、OPPO、VIVO,官方的適配文檔地址如下:
未公布劉海屏適配文檔的廠商,只能等待這些機型升級到Android P之后通過 Google 官方的方式進行適配
通過EMUI系統內提供的com.huawei.android.util.HwNotchSizeUtil來處理
小米:小米 MIUI Notch 屏 Android O 適配說明
通過MIUI系統屬性ro.miui.notch來判斷是否為劉海屏
OPPO:OPPO凹形屏適配說明
通過com.oppo.feature.screen.heteromorphism屬性來判斷是否為劉海屏
VIVO:VIVO全面屏應用適配指南
通過特有類android.util.FtFeature類來判斷是否為劉海屏。
另外,也和蝸牛閱讀一樣,把底部的導航欄隱藏了
二、沉浸式頁面適配
1、雲閱讀有聲書播放界面是沉浸式的狀態欄,
總體思路:劉海屏狀態欄的高度其實和普通的都是一樣, 所以只要給全面屏的頁面設置一個paddingtop就可以實現,
寫一個公共的頭部布局在基類里用,給頭布局設置一個ayout_marginTop。

1、 設置全屏,設置狀態欄透明

2、獲取到頭布局 audio_player_title, 非劉海屏幕的時候離頂部,默認20dp

3:給頭布局設置布局的paddingtop
非劉海屏幕——>不用處理
劉海屏幕——> 設置mtitleView 距離頂部為劉海區域的高度
