劉海螢幕適配(集多個部落格總結)

2021-08-29 02:08:59 字數 2939 閱讀 4138

自從iphone x發布後,各大廠商也發布了類似的劉海屏手機(「頂部螢幕凹槽設計」),開發者應該如何適配呢?

因為大家有**的需求,需要攝像頭前置,除了攝像頭前置外,劉海屏上還有一些其他的感測器,所以不同廠商的劉海屏長度也不相同。

如果頁面存在狀態列

· 那麼很簡單,不用適配,因為劉海區域會包含在狀態列中了。

· 如果不想看到劉海區域,可以使用layout_in_display_cutout_mode_never將劉海區域變成一條黑色邊。

如果頁面是全屏顯示

· 不適配的話將會留出一條黑色邊。

· 要做到真正全屏的話,那麼就先要獲取到劉海的區域(危險區域),內容部分(操作按鈕等)應當避開危險區域,保證在安全區域中展示。橫屏的話兩邊都需要注意避開劉海(危險區域)。

華為適配劉海屏主要有以下幾個步驟:1.配置meta-data

\2.檢測是否存在劉海屏3.獲取劉海屏的引數4. ui適配

· 12.檢測是否存在劉海屏

public static boolean hasnotchinscreen(context context) catch (classnotfoundexception e) catch (nosuchmethodexception e) catch (exception e) finally ;

try catch (classnotfoundexception e) catch (nosuchmethodexception e) catch (exception e) finally catch (classnotfoundexception e)

catch (nosuchmethodexception e)

catch (exception e)

finally

然後在進行適配,官方這方面的資料很少也不是很詳細

google從android p開始為劉海屏提供支援,目前提供了乙個類和三種模式: 乙個類指的是可以用displaycutout這個類找出劉海(cutout)的位置和形狀,呼叫**getdisplaycutout()**這個方法可以獲取劉海(cut

out)的位置和區域。

3.1 開啟劉海屏

我們在全屏的頁面,需要單獨開啟支援劉海屏。而 google 提供的適配方案,可以設定是否在全屏模式下,使用劉海屏的區域。

windowmanager.layoutparams lp

​ =getwindow().getattributes();

lp.layoutindisplaycutoutmode =

​ windowmanager.layoutparams.layout_in_display_cutout_mode_always;

getwindow().setattributes(lp);

新的布局屬性 layoutindisplaycutoutmode 包含三種可選的模式,

模式模式說明

layout_in_display_cutout_mode_default

只有當displaycutout完全包含在系統欄中時,才允許視窗延伸到displaycutout區域。 否則,視窗布局不與displaycutout區域重疊。

layout_in_display_cutout_mode_never

該視窗決不允許與displaycutout區域重疊。

layout_in_display_cutout_mode_short_edges

該視窗始終允許延伸到螢幕短邊上的displaycutout區域。

\1. layout_in_display_cutout_mode_short_edges模式會讓螢幕到延申劉海區域中。

\2. layout_in_display_cutout_mode_never模式不會讓螢幕到延申劉海區域中,會留出一片黑色區域。

\3. layout_in_display_cutout_mode_default模式在全屏顯示下跟layout_in_display_cutout_mode_never一樣。

可以看到:

\1. layout_in_display_cutout_mode_short_edges模式會讓螢幕到延申劉海區域中。

\2. layout_in_display_cutout_mode_never模式不會讓螢幕到延申劉海區域中,會留出一片黑色區域。

\3. layout_in_display_cutout_mode_default模式在全屏顯示下跟layout_in_display_cutout_mode_never一樣。

layout_in_display_cutout_mode_default模式在沉浸式狀態列下的效果:

可以看到:

當劉海區域完全在系統的狀態列時,layout_in_display_cutout_mode_default的顯示效果與layout_in_display_cutout_mode_short_edges一致。

所以,當我們進行劉海屏的適配時,請根據實際情況去使用不同的layoutindisplaycutoutmode。

劉海屏的高度

在全屏模式下,我們需要有辦法獲取到劉海屏凹槽的高度,才可以做到設計和布局的時候,留出安全距離。

雖然 google 要求,劉海屏的凹槽,必須和劉海的高度保持一致,而劉海屏又被隱藏在狀態列了,所以有乙個思路是直接獲取狀態列的高度,來判斷劉海之外,可布局的安全區域。

不過 android p 已經預留出了標準的測量 劉海屏凹槽 的 api:displaycutout。

劉海屏的凹槽,就在螢幕的中間,所以只有 getsafeinsettop() 方法返回的結果

Android 劉海屏適配總結

劉海屏手機因為比平常的手機多了一塊頂部的遮擋性劉海,所以會造成頂部 以及搜尋框的遮擋,而且有些廠商的手機 vivo 華為 預設是在 無狀態列 的介面將狀態列進行黑化顯示,這時候會導致系統下移,從而導致底部的一些 ui 被截斷。除此之外,一些控制項的顯示規則還會受到影響,如 popupwindow 的...

Unity開發中劉海屏手機的螢幕適配

unity ugui在劉海屏手機的螢幕適配主要是針對iphonex的適配。解決方法是每乙個介面的最上層都是乙個橫縱stretch自動拉伸的,當檢測到當前是iphonex時,開啟介面 自動設定left top right bottom 為44.通過解析度來判斷當前手機是不是iphonex。自適應iph...

android完美劉海螢幕適配狀態列沉浸式

普通的適配 1 無法沉浸狀態列 2 狀態列上面時間如果是白色 那麼再用白色的話 白色字型無法顯示 就是狀態列的電量什麼的都沒了 很奇怪 我得適配完美解決了以上東西 原理就是全屏後 補充狀態列的顏色 小公尺8劉海螢幕效果展示 請忽略為啥我的截圖不是劉海 反正小公尺8是劉海的 效果也是劉海的 imple...