Android - 開發頁面需瞭解的dip,sp,px知識,以及它們的轉換

工做中,時常會有任務要求開發新頁面,這時通常的流程是產品經理肯定要開發的頁面和功能,而後設計師提供設計稿,以後由咱們開發人員完成開發工做。api

一般,設計師提供的設計稿尺寸標註會很詳細,例如涉及到字時,字的大小,位置,顏色,字體等,都會一一標註。這時注意的是,設計師提供的尺寸標註所有是px(像素)爲單位。工具

但咱們在開發時不能直接使用px,按照Android規範,間距需使用dip(dp),字體大小需使用sp.字體

 

這時就須要咱們作出px與dip(dp),sp的轉換。spa

 

一. 瞭解dip(dp),sp,px設計

  首先來了解一下。3d

  dip:device independent pixels(設備獨立像素). 不一樣設備有不一樣的顯示效果,這個和設備硬件有關,通常咱們爲了支持WVGA、HVGA和QVGA 推薦使用這個,不依賴像素ip

  dp:一般認爲dp = dip,通常咱們使用dip。開發

  sp:scaled pixels(放大像素). 主要用於字體顯示。問個問題,爲何咱們不用dip來控制字體大小?而是使用sp。下面會介紹。產品

  px:像素,是一個絕對值,不一樣設備顯示效果相同,是多少就是多少,不會改變。io

  因此因而可知,咱們爲了支持不一樣分辨率,製做頁面時的間距應使用dip,而不是px。但也有特殊的例外狀況,例如咱們常常會須要在頁面中畫一條直線,作爲分割線,那麼線的高度直接用1px便可,這裏要用px。

 

 

二. dip(dp),sp與px的轉換

  轉換時,涉及到的新概念是分辨率與密度值,以下圖

  

  轉換公式:dip = px/mdpi基準比例sp = px/mdpi基準比例,注意不一樣分辨率的基準比例不一樣。

  例如在1080的分辨率下,比例值是3,設計稿上的間距若是是40px,那麼對應的dip就是13.3333dip(儘可能使用小數點,更精確)。這樣的顯示效果會與設計稿一致。

  可是,我在上網查閱資料時,發現sp的計算公式略有不一樣,有一個公式,sp = (int)(px/mdpi + 0.5f),這樣最後獲得一個整數,難道是字體大小通常要用整數?通過實踐發現,仍是直接sp=px/mdpi靠譜,例如字體大小是40px,那麼13.3333sp纔是最準確的答案。

 

 

三. 開發時,若是確保計算後的間距於設計稿一致?

  這時推薦你們使用的工具是Hierarchyviewer,經過它,能夠一目瞭然的看到真實的px大小,保證開發時的正確。例以下圖,

  

 

 

四. 一個小問題,爲什麼字體大小推薦使用sp,而不是dip?

  這是由於咱們在手機設置裏一般有字號大小的調整,當用戶調整字號大小時,如從標準調整爲超大號若是你的字體使用sp,就是相應的根據換算調整,若是是dip,則會保持不變,那這樣的效果不是咱們想要的。

 

                                  — Kevin Song

                                                                                                 2016.5.29

相關文章
相關標籤/搜索