乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       西北望msm66g9f 2019-06-24

      本文來(lái)源:聰明叉

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

      前言

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

      項(xiàng)目地址:
      https://github.com/smarxpan/NotchScreenTool

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

      這里我使用了小米的圖來(lái)說(shuō)明:

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

      當(dāng)我們?cè)谡勂聊贿m配時(shí),我們?cè)谡勈裁?/h2>
      1. 適應(yīng)更長(zhǎng)的屏幕

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

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

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

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

      聲明最大長(zhǎng)寬比

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

      黑色區(qū)域?yàn)槲蠢玫膮^(qū)域。

      適配方式

      適配方式有兩種:

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

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

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

        同時(shí)在節(jié)點(diǎn)下增加一個(gè)meta-data標(biāo)簽:

      原理說(shuō)明

      這里涉及到的知識(shí)點(diǎn)是android:resizeableActivity屬性。

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

      多窗口支持

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

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

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

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

      適配劉海屏

      Android9.0及以上適配

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

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

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

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

      默認(rèn)值是LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT,劉海區(qū)域不會(huì)顯示內(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

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

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

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

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

      適配參考:

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

      Android O 適配

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

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

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

      方案一:

      1、具體方式如下所示:

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

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

      方案二

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

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

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

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

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

      1. 獲取劉海寬高

      適配oppoAndroid O設(shè)備

      判斷是否是劉海屏

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

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

      因此Oppo機(jī)型必須適配。

      適配總結(jié)

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

      使用起來(lái)很簡(jiǎn)單:

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

      詳情可參考我項(xiàng)目中的代碼。

      參考鏈接

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

      1、OPPO凹形屏適配說(shuō)明:
      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

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多