日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Android劉海屏、水滴屏全面屏適配方案

 西北望msm66g9f 2019-06-24

本文來源:聰明叉

原文鏈接:https://www.jianshu.com/p/2b8db60ba8df

前言

我將適配方案整理后,封裝成了一個庫并上傳至github,可參考使用

項目地址:
https://github.com/smarxpan/NotchScreenTool

市面上的屏幕尺寸和全面屏方案五花八門。

這里我使用了小米的圖來說明:

上述兩種屏幕都可以統(tǒng)稱為劉海屏,不過對于右側(cè)較小的劉海,業(yè)界一般稱為水滴屏或美人尖。為便于說明,后文提到的「劉海屏」「劉海區(qū)」都同時指代上圖兩種屏幕。

當(dāng)我們在談屏幕適配時,我們在談什么

  1. 適應(yīng)更長的屏幕

  2. 防止內(nèi)容被劉海遮擋

其中第一點是所有應(yīng)用都需要適配的,對應(yīng)下文的聲明最大長寬比

而第二點,如果應(yīng)用本身不需要全屏顯示或使用沉浸式狀態(tài)欄,是不需要適配的。

針對需要適配第二點的應(yīng)用,需要獲取劉海的位置和寬高,然后將顯示內(nèi)容避開即可。

聲明最大長寬比

以前的普通屏長寬比為16:9,全面屏手機的屏幕長寬比增大了很多,如果不適配的話就會類似下面這樣:

黑色區(qū)域為未利用的區(qū)域。

適配方式

適配方式有兩種:

  1. 將targetSdkVersion版本設(shè)置到API 24及以上

    這個操作將會為 標(biāo)簽隱式添加一個屬性,android:resizeableActivity=”true”, 該屬性的作用后面將詳細說明。

  2. 在 標(biāo)簽中增加屬性:android:resizeableActivity=”false”

    同時在節(jié)點下增加一個meta-data標(biāo)簽:

原理說明

這里涉及到的知識點是android:resizeableActivity屬性。

在 Android 7.0(API 級別 24)或更高版本的應(yīng)用,android:resizeableActivity屬性默認為true(對應(yīng)適配方式1)。這個屬性是控制多窗口顯示的,決定當(dāng)前的應(yīng)用或者Activity是否支持多窗口。

多窗口支持

在清單的或 節(jié)點中設(shè)置該屬性,啟用或禁用多窗口顯示:

如果該屬性設(shè)置為 true,Activity 將能以分屏和自由形狀模式啟動。 如果此屬性設(shè)置為 false,Activity 將不支持多窗口模式。 如果該值為 false,且用戶嘗試在多窗口模式下啟動 Activity,該 Activity 將全屏顯示。

適配方式2即為設(shè)置屏幕的最大長寬比,這是官方提供的設(shè)置方式。

如果設(shè)置了最大長寬比,必須android:resizeableActivity=”false”。 否則最大長寬比沒有任何作用。

適配劉海屏

Android9.0及以上適配

Android P(9.0)開始,官方提供了適配異形屏的方式。

Support display cutouts:
https://developer./guide/topics/display-cutout?hl=zh-CN

通過全新的 DisplayCutout 類,可以確定非功能區(qū)域的位置和形狀,這些區(qū)域不應(yīng)顯示內(nèi)容。 要確定這些凹口屏幕區(qū)域是否存在及其位置,請使用 getDisplayCutout() 函數(shù)。

1、全新的窗口布局屬性 layoutInDisplayCutoutMode 讓您的應(yīng)用可以為設(shè)備凹口屏幕周圍的內(nèi)容進行布局。 您可以將此屬性設(shè)為下列值之一:

默認值是LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT,劉海區(qū)域不會顯示內(nèi)容,需要將值設(shè)置為LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES

  1. LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT

  2. LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES

  3. LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER

您可以按如下方法在任何運行 Android P 的設(shè)備或模擬器上模擬屏幕缺口:

1、啟用開發(fā)者選項。

2、在 Developer options 屏幕中,向下滾動至 Drawing 部分并選擇 Simulate a display with a cutout。

3、選擇凹口屏幕的大小。

適配參考:

其中延伸顯示區(qū)域到劉海的代碼,也可以通過修改Activity或應(yīng)用的style實現(xiàn),例如:

Android O 適配

因Google官方的適配方案到Android P才推出,因此在Android O設(shè)備上,各家廠商有自己的實現(xiàn)方案。

我這里主要適配了華為、小米、oppo,這三家都給了完整的解決方案。至于vivo,vivo給了判斷是否劉海屏的API,但是沒用設(shè)置劉海區(qū)域顯示到API,因此無需適配。

適配華為Android O設(shè)備

方案一:

1、具體方式如下所示:

對Application生效,意味著該應(yīng)用的所有頁面,系統(tǒng)都不會做豎屏場景的特殊下移或者是橫屏場景的右移特殊處理:

對Activity生效,意味著可以針對單個頁面進行劉海屏適配,設(shè)置了該屬性的Activity系統(tǒng)將不會做特殊處理:

方案二

對Application生效,意味著該應(yīng)用的所有頁面,系統(tǒng)都不會做豎屏場景的特殊下移或者是橫屏場景的右移特殊處理

我的NotchScreenTool中使用的就是方案二,如果需要針對Activity,建議自行修改。

1. 設(shè)置應(yīng)用窗口在華為劉海屏手機使用劉海區(qū)

2. 清除添加的華為劉海屏Flag,恢復(fù)應(yīng)用不使用劉海區(qū)顯示

  1. 設(shè)置顯示到劉海區(qū)域

  1. 獲取劉海寬高

適配oppoAndroid O設(shè)備

判斷是否是劉海屏

獲取劉海的左上角和右下角的坐標(biāo)

Oppo Android O機型不需要設(shè)置顯示到劉海區(qū)域,只要設(shè)置了應(yīng)用全屏就會默認顯示。

因此Oppo機型必須適配。

適配總結(jié)

根據(jù)上述功能,我將其整理成了一個依賴庫:NotchScreenTool

使用起來很簡單:

獲取劉海區(qū)域信息后就可以根據(jù)自己應(yīng)用的需要,來避開重要的控件。

詳情可參考我項目中的代碼。

參考鏈接

華為劉海屏手機安卓O版本適配指導(dǎo)

1、OPPO凹形屏適配說明:
https://open./wiki/doc#id=10159

2、vivo 全面屏應(yīng)用適配指南:
https://dev.vivo.com.cn/documentCenter/doc/103

3、小米劉海屏水滴屏 Android O 適配:
https://dev.mi.com/console/doc/detail?pId=1293

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多