<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Android全面的屏幕適配方案解析(二)

          共 2976字,需瀏覽 6分鐘

           ·

          2021-12-31 11:50

          開(kāi)始正文前先嘮一下,后臺(tái)有童鞋問(wèn)這個(gè)系列咋不連著更新,其實(shí)是這個(gè)系列文章還沒(méi)全部寫(xiě)完,這也是邊寫(xiě)邊更新,由于我也是要正常上班的,只能抽時(shí)間寫(xiě),所以會(huì)隔段時(shí)間寫(xiě)好才能更,望理解哈。

          還有就是你們也知道,文章沒(méi)怎么開(kāi)過(guò)贊賞,現(xiàn)在準(zhǔn)備每個(gè)月底只開(kāi)一次,諸位如果覺(jué)得在過(guò)去的時(shí)間里面有一篇文章對(duì)你有益,煩請(qǐng)打賞個(gè)鹵蛋,打賞完全自愿哈,正因完全自愿,我才覺(jué)得特別可貴。


          上一篇把屏幕適配相關(guān)的概念梳理了一下,主要也是為了能更好的理解后面內(nèi)容,那從這篇開(kāi)始就要講解適配方案啦,沒(méi)看第一篇的可以先看這篇:Android全面的屏幕適配方案解析(一)

          下面列舉常用的適配方案:


          • dp適配方案

          • 寬高限定符適配方案

          • AndroidAutoLayout適配方案

          • sw限定符適配方案

          • 今日頭條適配方案

          • AndroidAutoSize適配方案


          看到這有些童鞋可能就要問(wèn)了,為啥有些過(guò)時(shí)的適配方案這里還講解啊,只能說(shuō)每種適配方案都會(huì)有各自的優(yōu)缺點(diǎn),從最原始的適配方案講起,才能更好的理解為啥會(huì)衍生出各種適配方案,話不多說(shuō),直接開(kāi)干吧!


          1、dp適配方案


          眾所周知,在開(kāi)發(fā)過(guò)程中標(biāo)識(shí)尺寸的時(shí)候,Android并不推薦使用px這個(gè)真實(shí)像素單位,因?yàn)橄嗤叽缭诓煌直媛实氖謾C(jī)顯示效果各不相同,如下為圖片寬高為250x250(px),在分辨率:480x800、720x1280、1080x1920的顯示效果圖:



          出現(xiàn)類(lèi)似于上圖這樣的效果,整體的布局效果可能會(huì)變形,所以px這個(gè)單位在布局文件中是不推薦的。


          相對(duì)應(yīng)的Android推薦使用dp作為尺寸單位來(lái)適配UI,之前我們講過(guò),dp為密度無(wú)關(guān)像素,與終端上的實(shí)際物理像素點(diǎn)無(wú)關(guān),可以保證在不同屏幕像素密度的設(shè)備上顯示相同的效果。


          下面還是根據(jù)實(shí)例來(lái)說(shuō)明一下,如下為圖片寬高為250x250(dp),在分辨率:480x800、720x1280、1080x1920的顯示效果圖:



          從效果圖可以看出,寬高250dp在不同分辨率手機(jī)整體的布局效果差異并不大,為啥會(huì)這樣呢?


          我們知道同樣尺寸在不同分辨率的設(shè)備,每1dp所代表的像素?cái)?shù)量是不一樣的,如表格所示:



          480x800720x12801080x1920
          dip240320480
          dip/1601.523


          由表格可以看出,在480x800、720x1280、1080x1920的手機(jī),dpi是不同的,這也是說(shuō),1dp在這些不同分辨率的手機(jī)中,分別對(duì)應(yīng)的1.5px、2px、3px,這樣當(dāng)我們用dp作為控件大小單位的時(shí)候,在不同分辨率的手機(jī)上看到的大小一樣,此時(shí)各手機(jī)上顯示的比例也就一致啦。


          以上的適配方式,通過(guò)dp再加上自適應(yīng)布局和weight比例布局可以基本解決不同手機(jī)上適配的問(wèn)題,這基本上就是最原始的Android適配方案。


          那這種方案有沒(méi)缺點(diǎn)呢?


          自然是有的,不然也不會(huì)推出這么多的適配方案,那我們來(lái)看看有啥缺點(diǎn)。


          我們知道Android之所以碎片化這么嚴(yán)重,跟Android系統(tǒng)、屏幕尺寸、屏幕密度的碎片化有很大的關(guān)系,而手機(jī)廠商生產(chǎn)的手機(jī)設(shè)備也并沒(méi)有按照屏幕尺寸、分辨率和像素密度的關(guān)系規(guī)則來(lái)實(shí)現(xiàn),比如屏幕分辨率1080x1920,屏幕尺寸為5,那么dip為440,假如UI設(shè)計(jì)圖按屏幕寬度為375dp設(shè)計(jì),那么這樣會(huì)存在啥問(wèn)題呢?


          根據(jù)上述描述,我們可以通過(guò)計(jì)算出屏幕寬度為:1080/(440/160) = 393dp,也就是說(shuō)實(shí)際的屏幕寬度是比設(shè)計(jì)圖的要寬的,那這樣即使用dp為單位也無(wú)法跟其它設(shè)備顯示同樣的效果,這就需要通過(guò)估算或者設(shè)定規(guī)范值等等進(jìn)行換算設(shè)置,這也就需要我們耗費(fèi)精力去轉(zhuǎn)換尺寸,這會(huì)極大降低開(kāi)發(fā)效率。


          2、寬高限定符適配方案


          所謂的寬高限定符適配就是窮舉市面上所有的Android手機(jī)的寬高像素值,不過(guò)需要先設(shè)定一個(gè)基準(zhǔn),然后其它分辨率根據(jù)這個(gè)基準(zhǔn)做適配,如圖所示:



          那什么叫設(shè)定一個(gè)基準(zhǔn)呢?


          比如設(shè)定320x480的分辨率為基準(zhǔn),那么:

          基準(zhǔn)寬度為320,即將任何分辨率的寬度分為320份,取值為x1到x320。

          基準(zhǔn)長(zhǎng)度為480,即將任何分辨率的長(zhǎng)度分為480份,取值為y1到y(tǒng)480。


          那么該基準(zhǔn)尺寸編寫(xiě)對(duì)應(yīng)的dimens文件為:



          那什么又叫其它分辨率根據(jù)這個(gè)基準(zhǔn)做適配呢?


          比如拿480x800分辨率的手機(jī)來(lái)說(shuō),需要在項(xiàng)目中values-800x480目錄下的dimens.xml文件中的如下設(shè)置,如圖所示:



          那么這份數(shù)據(jù)是怎么計(jì)算得到的呢,那當(dāng)然是在基準(zhǔn)分辨率的基礎(chǔ)上計(jì)算得到的,以下為寬度x演示即:


          x1=(480/基準(zhǔn))*1=(480/320)*1=1.5px

          x2=(480/基準(zhǔn))*2=(480/320)*2=3px

          ...

          x320=(480/基準(zhǔn))*320=(480/320)*320=480px


          同理長(zhǎng)度y計(jì)算也是一樣的。


          這個(gè)時(shí)候有童鞋又說(shuō)了,市面上我怎么知道有多少分辨率的手機(jī)啊,就算知道所有分辨率,每個(gè)這么計(jì)算不得寫(xiě)廢了啊,淡定哈,這些都是可以通過(guò)工具自動(dòng)生成,這得感謝鴻洋大佬提供的生成工具。


          1、分析需要的支持的分辨率


          對(duì)于主流的分辨率已經(jīng)集成到程序里了,對(duì)于比較特殊的可以通過(guò)參數(shù)指定,而關(guān)于屏幕分辨率信息,可以通過(guò)該網(wǎng)站查詢(xún):http://screensiz.es/phone


          2、自動(dòng)生成文件的程序地址


          由于微信不支持放外部超鏈接,所以自行復(fù)制打開(kāi)哈:

          https://github.com/hongyangAndroid/Android_Blog_Demos/tree/master/blogcodes/src/main/java/com/zhy/blogcodes/genvalues



          這里提供了個(gè)jar包,默認(rèn)情況下,雙擊即可生成,如圖所示:



          這里默認(rèn)內(nèi)置了常用的分辨率,默認(rèn)基準(zhǔn)為480*320,對(duì)于特殊需求,可以通過(guò)命令行指定即可,比如我想以分辨率1280 * 800為基準(zhǔn)?,并且額外支持尺寸:1152 * 735;4500 * 3200,如圖所示:



          格式如下:

          java -jar xx.jar width height width,height_width,height


          最后自動(dòng)生成文件如圖所示:



          這樣就更改了默認(rèn)的基準(zhǔn),還添加了額外支持的分辨率。


          使用這種適配方案,可以按照UI設(shè)計(jì)稿的尺寸為基準(zhǔn)分辨率,這時(shí)運(yùn)行在不同分辨率的手機(jī)中,這些系統(tǒng)會(huì)根據(jù)這些dimens引用去該分辨率的文件夾下面尋找對(duì)應(yīng)的值,這樣基本解決了我們的適配問(wèn)題,而且極大的提升了我們UI開(kāi)發(fā)的效率。


          那這種方案有沒(méi)缺點(diǎn)呢?當(dāng)然也是有的


          • 最明顯的肯定就是占用資源大,會(huì)增加APK的體積

          • 容錯(cuò)機(jī)制大,需要精準(zhǔn)命中資源文件才能適配,比如1920x1080的手機(jī)就一定要找到1920x1080的限定符,否則就只能用統(tǒng)一的默認(rèn)的dimens文件了。而使用默認(rèn)的尺寸的話,UI就很可能變形。


          為了防止篇幅過(guò)長(zhǎng),這里就先介紹兩種適配方案,后面幾種后面會(huì)一一解析,敬請(qǐng)期待。


          今天是2021最后一天了,這也是2021的最后一篇文章了,我也還欠著好幾篇文章沒(méi)寫(xiě)呢,只能2022慢慢還了哈,最后預(yù)祝大家元旦快樂(lè)!

          瀏覽 78
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线观看中文字幕码 | 婷婷黄色伊人 | 亚洲操逼123 | 大香蕉伊看人在线在线观看 | 豆花视频网 |