前言:
之前屏幕適配這個(gè)問(wèn)題一直困擾著我东抹。
1.為什么要進(jìn)行適配,當(dāng)然這個(gè)問(wèn)題有些白癡沃测,對(duì)于開(kāi)發(fā)者而言肯定是遇到了此類問(wèn)題才會(huì)尋求答案。
2.現(xiàn)在應(yīng)用比較廣泛的適配方案有哪些蒂破。
3.哪一種是最好的。我要用最高效附迷,最安全惧互,最簡(jiǎn)便的方案喇伯。
1.為什么要進(jìn)行適配
?我們不僅要會(huì)適配喊儡,其實(shí)更應(yīng)該清楚為什么適配稻据,那么多適配方案該怎么選艾猜?當(dāng)然就要搞清楚這個(gè)問(wèn)題。
分辨率碎片化
什么是分辨率匆赃?就是講解分辨率之前淤毛,我們要明白一個(gè)概念炸庞。在我們手機(jī)上呈現(xiàn)的一條線钱床,一個(gè)面埠居,一張圖像都是由最小的單位像素(px)來(lái)表示的.查牌。假如分辨率1920*1080 就代表豎向1920個(gè)像素,橫向1080個(gè)像素滥壕。至于Android究竟有多少種分辨率的屏幕纸颜,我不知道绎橘,只知道有很多種胁孙。
尺寸碎片化
屏幕尺寸指屏幕的對(duì)角線的長(zhǎng)度称鳞,單位是英寸涮较,1英寸=2.54厘米冈止,
比如常見(jiàn)的屏幕尺寸有4.2狂票、4.7熙暴、5.0闺属、5.2、5.5周霉、6.0等掂器。
dpi
上圖已經(jīng)說(shuō)明dpi了,就是單位尺寸內(nèi)的像素?cái)?shù)量dpi=px/inch(尺寸)俱箱,dpi數(shù)量越大說(shuō)明單位內(nèi)像素密度越大国瓮,顯示越細(xì)膩。
dp
dp=dpi/160狞谱。為什么要除以160巍膘?我也不知道。從dpi的計(jì)算公式上可以看出dp能夠根據(jù)不同屏幕(分辨率/尺寸也就是dpi)獲得不同的像素(px)數(shù)量芋簿。這是Android最原始的適配方案。
Density
這個(gè)是指屏幕上每平方英寸(2.54 ^ 2 平方厘米)中含有的像素點(diǎn)數(shù)量璃饱。
這些概念我大概梳理了一下与斤,如果不清楚,請(qǐng)仔細(xì)再查閱相關(guān)文檔。
看完上面概念就會(huì)有疑問(wèn)撩穿?如果我用px直接展示邊距或者控件大小磷支,分辨率不同的屏幕,分辨率越高的話我的實(shí)際大小就會(huì)變小食寡,那我用dp就好了。是的抵皱,dp就是最原始的適配方案,但是如果兩塊屏幕尺寸一樣呻畸,分辨率差一倍呢移盆?density就會(huì)差一倍伤为,這樣即使你使用了dp作為單位,view的大小在不同手機(jī)中還是會(huì)有尺寸的變化绞愚。
2.都有哪些適配方案呢
1.寬度限定符適配
2.鴻洋大神的AndroidAutoLayout
3.百分比
第一種呢就是窮舉市面上所有的手機(jī)分辨率,設(shè)定一個(gè)基準(zhǔn)利率位衩,其他分辨率都根據(jù)這個(gè)基準(zhǔn)分辨率來(lái)計(jì)算,在不同的尺寸文件夾內(nèi)部蚂四,根據(jù)該尺寸編寫對(duì)應(yīng)的dimens文件。
這個(gè)方案呢遂赠,容錯(cuò)率比較差,你必須找到所有的分辨率的手機(jī)跷睦,造成apk的體積龐大。
鴻洋大神的AndroidAutoLayout其實(shí)就是百分比抑诸,至于為什么要分開(kāi)說(shuō)呢?因?yàn)檫@個(gè)庫(kù)已經(jīng)不維護(hù)了蜕乡,如果你要自己搭一個(gè)這樣的庫(kù)也是一個(gè)思路。
第4種方案它是通過(guò)修改density值來(lái)實(shí)現(xiàn)层玲。公式是當(dāng)前設(shè)備屏幕總寬度(單位為像素)/ 設(shè)計(jì)圖總寬度(單位為 dp) = density反症。特點(diǎn)呢就是開(kāi)發(fā)快,穩(wěn)定性有所欠缺铅碍。
第五種方案。這種機(jī)制和上文提到的寬高限定符適配原理上是一樣的胞谈,都是系統(tǒng)通過(guò)特定的規(guī)則來(lái)選擇對(duì)應(yīng)的文件》成可以看作是升級(jí)版,升級(jí)的地方就是減小了導(dǎo)入文件的數(shù)量爵嗅,從而減小了apk的體積,而且利用dp來(lái)適配笨蚁,容錯(cuò)率更高。相比于第四種也更加穩(wěn)定括细。
還有其他方案就不一一列舉了,沒(méi)有最好的方案奋单,只有最合適。至于更詳細(xì)的原理和使用览濒,已經(jīng)附上鏈接,點(diǎn)擊即可查看贷笛。實(shí)在是不想碼字了。見(jiàn)諒乏苦。