標籤:android style class blog code http
本文主要講的是android中長度單位(dp、px、sp)的用法。
1、px:pixels(像素)
(1)、不同的裝置不同的顯示屏顯示效果是相同的
(2)、這是絕對像素,是多少就永遠是多少不會改變。
一般我們形容螢幕的解析度,例如解析度800*480,實際表示改手機螢幕在高度上有800個像素,寬度上有400個像素,整個螢幕就是由800*480個像素點組成。但是由於我們的螢幕大小是不一樣的,就會導致同樣解析度在不同尺寸的螢幕上表現不同,同解析度下,尺寸越小的螢幕上每英寸上分布的像素點就越多,即解析度越高,螢幕越清晰。
2、dpi:dpi(dots per inch)
表示的是每英尺的點(像素)數
我們平常說的手機螢幕的大小比如4.5英寸,指的是螢幕對角線的長度是4.5英寸,那麼我們的dpi的計算公式就是:
dpi(dots per inch)= /size
dpi表示的是每英尺的像素,dpi越高,說明螢幕細粒度越高,也就越清晰了
3、dp:dp(Device Independent pixels)
很簡單,和dip是一樣的。
dp和px的換算公式:px=dp*(dpi/160)
例:在大小相同的2塊螢幕上,假設解析度分別為480*320、960*640,計算出480*320的dpi為160,假設螢幕上有一個TextView控制項,分別設定其長(layout_weight)為160px、160dp,則畫出二者的表現。
分析過程:
因為螢幕尺寸相同,解析度分別為480*320、960*640,其中480*320的dpi為160,則另一塊屏的dpi為320,計算結果如所示:
當螢幕上有一個TextView控制項,分別設定其長(layout_weight)為160px、160dp,則畫出二者的表現
原理:
第一塊螢幕的dpi是 dpi=160,第二塊螢幕的 dpi=320 ,如果套用上面的 dp和px 轉化公式就可以得到:
解析度為480*320的螢幕,這個控制項的的 px 為:160px=160dp*(160/160),也就是160px,佔了螢幕一半
160dp=160px
160px=160px
解析度為960*640的螢幕,這個空間的 px 為:320px=160dp*(320/160),也就是320px,也是佔了螢幕的一半
160dp=320px
160px=160px
這樣我們的應用程式就可以在不同的解析度上展現的效果相同了。
ps:當要設定控制項寬度或者是高度的大小的時候,要使用的單位是 dp ,而不要使用 px。
4、sp:sp(scaled pixels)
sp這個單位通常我們用來設定字型的大小
如果我們改變了系統的字型大小,其控制項的顯示大小也會跟著發生變化。
5、擷取螢幕解析度和密度
1 DisplayMetrics displayMetrics = new DisplayMetrics();2 getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);3 System.out.println("width : " + displayMetrics.widthPixels + " height : " + displayMetrics.heightPixels + " density : " + displayMetrics.density);
最終在Logcat中我們可以看到width、height、density的值
當density=1,則1dp=1px;
當density=2,則1dp=2px;
當density=3,則1dp=3px;
apk的資源套件中,
當螢幕density=240時,即1dp=1.5px,使用hdpi標籤的資源
當螢幕density=160時,即1dp=1px,使用mdpi標籤的資源
當螢幕density=120時,即1dp=0.75px,使用ldpi標籤的資源。