天天看點

Android布局檔案中常用的長度機關解析

Android布局檔案中常用的長度機關解析(http://www.2cto.com/kf/201208/148252.html)
2012-08-15       0  個評論      
收藏    
Android布局檔案中常用的長度機關解析
我要投稿

Android 顯示機關

   dip: device independent pixels(裝置獨立像素). 不同裝置有不同的顯示效果,這個和裝置硬體有關,一般我們為了支援WVGA、HVGA和QVGA cwj推薦使用這個,不依賴像素。

  px: pixels(像素). 不同裝置顯示效果相同,一般我們HVGA代表320x480像素,這個用的比較多。

  pt: point,是一個标準的長度機關,1pt=1/72英寸,用于印刷業,非常簡單易用;

  sp: scaled pixels(放大像素). 主要用于字型顯示best for textsize。

  由此,根據 google 的建議,TextView 的字号最好使用 sp 做機關,而且檢視

  TextView的源碼可知 Android 預設使用 sp 作為字号機關。

  ###################################################################

  關于換算(以 sp 和 pt 為例)

  檢視 TextView 等類的源碼,可知:

  case COMPLEX_UNIT_PX:

  return value;

  case COMPLEX_UNIT_SP:

  return value * metrics.scaledDensity;

  case COMPLEX_UNIT_PT:

  return value * metrics.xdpi * (1.0f/72);

  --------------------------

  scaledDensity = DENSITY_DEVICE / (float) DENSITY_DEFAULT;

  xdpi = DENSITY_DEVICE;

  --------------------------

  DENSITY_DEFAULT = DENSITY_MEDIUM = 160;

  ============================================

  是以: 假設 pt 和 sp 取相同的值 1,則可設 1pt 和 1sp 之間系數為 x,

  1 * DENSITY_DEVICE / 72 = x * 1 * DENSITY_DEVICE / 160   =>

  x = 160 / 72 = 2.2222

  也就是說在 Android 中,   1pt 大概等于 2.22sp

  以上供參考,如果 UI 能夠以 sp 為機關提供設計是最好的,如果設計中沒有 sp

  的概念,則開發人員也可以通過适當的換算取近似值。

  什麼是Dip和Sp

  過去,程式員通常以像素為機關設計計算機使用者界面。例如,定義一個寬度為300像素的表單字段,列之間的間距為5個像素,圖示大小為16×16像素等。這樣處理的問題在于,如果在一個每英寸點數(dpi)更高的新顯示器上運作該程式,則使用者界面會顯得很小。在有些情況下,使用者界面可能會小到難以看清内容。

  與分辨率無關的度量機關可以解決這一問題。Android支援下列所有機關。

  px(像素):螢幕上的點。

  in(英寸):長度機關。

  mm(毫米):長度機關。

  pt(磅):1/72英寸。

  dp(與密度無關的像素):一種基于螢幕密度的抽象機關。在每英寸160點的顯示器上,1dp = 1px。

  dip:與dp相同,多用于android/ophone示例中。

  sp(與刻度無關的像素):與dp類似,但是可以根據使用者的字型大小首選項進行縮放。

  為了使使用者界面能夠在現在和将來的顯示器類型上正常顯示,建議大家始終使用sp作為文字大小的機關,将dip作為其他元素的機關。當然,也可以考慮使用矢量圖形,而不是用位圖

  說說dp和sp,dp也就是dip。這個和sp基本類似。如果設定表示長度、高度等屬性時可以使用dp或sp。但如果設定字型,需使用sp。dp是與密度無關,sp除與密度無關外,還與scale無關。如果螢幕密度為160,這時dp和sp和px是一樣的。1dp=1sp=1px,但如果使用px作機關,如果螢幕大小不變(假設還是3.2寸),而螢幕密度變成了320。那麼原來TextView的寬度設成160px,在密度為320的3.2寸螢幕裡看要比在密度為160的3.2寸螢幕上看短了一半。但如果設定成160dp或160sp的話。系統會自動将width屬性值設定成320px。也就是160 * 320 / 160。其中320 / 160可稱為密度比例因子。也就是說,如果使用dp和sp,系統會根據螢幕密度的變化自動進行轉換。