引言
Android系統由於是開源的,因此不同的廠商開發出自己的硬件去使用Android系統,因此市面上就有很多種尺寸的屏幕,因此作爲軟件開發人員,就必須得掌握Android中各種不同的尺寸單位,以及它們之間的關係。所以本篇博客,將深入學習一下這方面的知識。
Android中有哪些尺寸單位?
android中的尺寸(dimension)主要包括:dp,sp,pt,px,mm,in;
可以點擊看官網說法
dp
dp也即dip(Density-independent Pixels),是一種與屏幕密度無關的尺寸單位,當屏幕密度是160dpi時,1dp=1px。當運行在高dpi的屏幕上時,dp就會按比例放大,當運行在低dpi的屏幕上時,dp就會被按比例縮小。因此dp是一種簡單的解決view在不同大小屏幕上顯示的問題的解決方案。
sp
sp(Scale-independent Pixels)和dp是比較相似的,但是它會隨着用戶對系統字體大小的設置進行比例縮放,換句話說,它能夠跟隨用戶系統字體大小變化。所以它更加適合做爲字體大小的單位。
pt
pt(Point)是一個基於屏幕大小的物理尺寸,1pt等於1/72英寸(inch)。(不常用)
px
px(Pixels)相當於實際屏幕的像素,由於不同屏幕的像素數差異比較大,因此這個單位不被推薦用於尺寸單位,
mm
mm(Millimeters)即毫米,這是一個基於屏幕物理尺寸的單位。(不常用)
in
in(Inches)即英寸,也是一個基於屏幕物理尺寸的單位。(不常用)
各個尺寸之間的轉換
dp轉px
public static int dip2px(Context context,float dipValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue*scale+ 0.5f);
}
px轉dp
public static int px2dip(Context context,float px){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(px/scale +0.5f);
}
sp轉px
public static int sp2px(Context context,float spValue){
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int)(spValue*fontScale+0.5f);
}
px轉sp
public static int px2sp(Context context,float pxValue){
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int)(pxValue/fontScale+0.5f);
}
mm轉in
public static double mm2in(double mmValue){
return mmValue*(10/254);
}
in轉mm
public static double in2mm(double inValue){
return inValue*(25.4);
}
收藏的字體大小對照表
<!--OSChina APP-->
<dimen name="text_size_32">32.0dip</dimen>
<dimen name="text_size_31">31.0dip</dimen>
<dimen name="text_size_30">30.0dip</dimen>
<dimen name="text_size_29">29.0dip</dimen>
<dimen name="text_size_28">28.0dip</dimen>
<dimen name="text_size_27">27.0dip</dimen>
<dimen name="text_size_26">26.0dip</dimen>
<dimen name="text_size_25">25.0dip</dimen>
<dimen name="text_size_24">24.0dip</dimen>
<dimen name="text_size_23">23.0dip</dimen>
<dimen name="text_size_22">22.0dip</dimen>
<dimen name="text_size_21">21.0dip</dimen>
<dimen name="text_size_20">20.0dip</dimen>
<dimen name="text_size_19">19.0dip</dimen>
<dimen name="text_size_18">18.0dip</dimen>
<dimen name="text_size_17">17.0dip</dimen>
<dimen name="text_size_16">16.0dip</dimen>
<dimen name="text_size_15">15.0dip</dimen>
<dimen name="text_size_14">14.0dip</dimen>
<dimen name="text_size_13">13.0dip</dimen>
<dimen name="text_size_12">12.0dip</dimen>
<dimen name="text_size_11">11.0dip</dimen>
<dimen name="text_size_10">10.0dip</dimen>
<dimen name="text_size_9">9.0dip</dimen>
<dimen name="text_size_8">8.0dip</dimen>
<dimen name="text_size_7">7.0dip</dimen>
PS:爲什麼用dip,因爲SP會隨隨系統字體大小變動,佈局可能就不太好看或者亂掉。
Android系統中常用的字體大小
總結
dp和sp是Android中最常用的兩個單位,dp常常被被用於View大小的單位,sp常被用於字體大小的單位,有時候dp也會被用於字體大小單位,看具體需求決定。