天天看點

android 的螢幕适配問題,dp與px的換算

[size=x-large]在進入正題之前先了解一下基本術語和概念[/size]

[size=large]1.螢幕大小[/size]

根據螢幕對角線實際測量的大小

[size=large]2.螢幕密度[/size]

螢幕實體區域一個機關(一般指的是英寸)上像素多少簡稱dpi。這一點對于公司的UI妹妹可能是最難了解的。這裡的像素指的是螢幕上用來顯示一個色值最小的實體機關。如果将螢幕放大就能看到螢幕上有很多個小燈,每三個燈形成一組(這三個燈分别用來顯示R,G,B三基色)。這一組就是一個最小的機關也就是這裡所說的像素點。而一英寸上有多少個這樣的像素點就說這個螢幕的密度是多少。我們計算的螢幕密度通常都是這塊顯示屏對角線的每英寸上像素點的值。知道螢幕的分辨率和尺寸可以通過以下方法計算螢幕密度。例如一塊n英寸的螢幕的分辨率是a*b(常見的有1280*720、800*480等) 。dpi(螢幕密度)就是 a*a+b*b然後開平方再除以n。

[size=large]3.獨立像素機關 Density-independent pixel(dp)[/size]

注意這裡是dp 也可以稱為dip,一定要與dpi區分。所謂的dp其實就是android用來适配的一種手段,通過在不同的螢幕密度上換算成不同的像素值進行适配。在160dpi的螢幕上一個像素剛好可以用一個螢幕上最小的顯示機關顯示(2中所說的像素點,即由三個小燈組成的最小顯示機關)。在320dpi的螢幕上一個像素就是由螢幕上兩個最小的顯示機關顯示。他們的換算規律就是dp=px*(dpi/160)。舉個簡單的例子:為了便于了解這裡隻讨論一個方向上的顯示問題(例如水準方向上)a螢幕一英寸的長度上有10個最小的實體顯示機關,b螢幕一英寸的長度上有20個最小的實體顯示機關。在a上顯示0.5英寸的紅色需要用5個顯示機關顯示同樣的長度在b上顯示就需要用10個顯示機關。比如說我們将長度設定成5dp那麼他會自動的在a螢幕上用5個顯示機關顯示在b上用10個顯示機關顯示,這樣看起來他們的長度是一樣的也就達到了螢幕适配的問題。至于它是怎樣确定在一個dp對應幾個像素時就會嚴格根據螢幕密度來換算,換算公式上面已經給出來了。

[size=x-large]适配的一些方法和規則[/size]

目前主流螢幕在1280*720上,800*480及以下的螢幕正在減少并且在像素值更多的圖檔上設計師能設計出效果更好的圖檔,是以基本以1280*720這個尺寸的圖檔為标準。隻要設計師的圖檔是嚴格按照這個尺寸标注的換算成dp的時候除以2即可。當然,android的碎片化是相當嚴重的以上所有規則都是在以下的标準中能嚴格适配,即螢幕的尺寸和密度必須滿足下面的條件:

mdpi:3.5inch,320*480, hdpi:4.0inch,480*800或480*854,xhdpi:4.5inch,720*1280.即使是這樣,也隻能保證mdpi和hdpi有相同的比例,而xhdpi則不能。因為滿屏寬度為例,mdpi和hdpi都是320dp,而xhdpi和xxhdpi為360dp。這也是為什麼選擇1280*720尺寸圖檔的原因。

好了,到這裡就說完了。想強調的是,android螢幕适配終究是相對的,因為尺寸太多,不可能完全适配,是以我們隻适配大衆的,數量最多的,正常的。如果想要适配一些奇葩的螢幕我們隻能單獨切圖單獨适配了。

轉載請注明出處:[url]http://renyuan-1991.iteye.com/blog/2233780[/url]

希望愛好程式設計的小夥伴能加這個群,互相幫助,共同學習。群号: 141877583

繼續閱讀