android之劉海屏適配


 

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 官方的方式進行適配

華為:華為劉海屏手機安卓O版本適配指導

通過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 距離頂部為劉海區域的高度

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM