Anroid中尺寸單位詳解

引言

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也會被用於字體大小單位,看具體需求決定。

參考文章

Android系統字體規範與應用探索
Android官網尺寸單位簡介
Android:佈局單位轉換

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章