首先來瞭解一下幾個概念
Screen size 螢幕尺寸
實際的物理尺寸,是根據螢幕的對角線計量的。比如說Iphone4是3.5英寸的螢幕,就是說它的螢幕對角線長。1英寸大約等於25.4毫米。後面提到的尺寸單位Points等於一英寸的1/72。
為了簡單起見,Android將所有的實際螢幕尺寸劃分為4種廣義的尺寸:small, normal, large, 和 extra large。
Screen density 螢幕密度
在螢幕上的物理地區中的像素數量,通常簡單的以dpi(dots per inch 每英寸的點數)指代。例如,一個低解析度的螢幕在同樣的物理地區中的像素數肯定比中解析度或者高解析度的螢幕少。
為了簡單起見,Android將所有的實際螢幕密度劃分為四個廣義的密度:low, medium, high, 和 extra high。
是Android對螢幕尺寸和螢幕密度的劃分:
Resolution 解析度
螢幕物理像素總數。比如三星Rugby III:其解析度為240×320像素。240×320像素的意思就是,手機螢幕橫向每行有240個像素點,縱向每列有320個像素點,乘起來就是320×240=76800個像素點。
Dimension尺寸
XML中定義的尺寸值。一個尺寸值就是帶有尺寸單位的數值,例如:10px、2in、5sp。以下是Android中支援的尺寸單位:
dp
Density-independent Pixels 密度無關像素-基於螢幕的物理密度的一個抽象單位。這個尺寸單位是以160dpi(dots per inch 每英寸的點數)的螢幕為基準的,也就是說在這樣的的螢幕上,1dp大約等於1px。在更高密度的螢幕上,用來表示1dp的像素數目就會按比例(根據螢幕dpi確定的適當的因數)增加;同樣的,在一個低密度的螢幕上,用來表示1dp的像素數就會按比例減少。表示1dp的像素數會根據螢幕的密度而變化,但並不一定成正比。使用dp代替px作為尺寸單位,是一個簡單的解決方案,它使在不同密度裝置上的布局檔案中的View適當的調整大小。換句話說,它使不同裝置上的UI元素在現實世界中的尺寸保持一致性。
sp
Scale-independent Pixels 比例無關像素-類似於dp,但是也會受使用者對字型大小的設定的影響。它被推薦用於設定字型大小,這樣字型的實際顯示效果會根據螢幕的密度和使用者對字型大小的設定來調整。
pt
Points 點-基於螢幕的物理大小(physical size),等於一英寸的1/72。
px
Pixels 像素-就是螢幕的實際像素。不同裝置每英寸中的像素數目可能不同,因而不同裝置的總的像素數有的多,有的少。所以不推薦使用這個尺寸單位,因為不同的裝置的實際表現不同。
mm
Millimeters 毫米-基於螢幕的物理大小(physical size)。
in
Inches 英寸-基於螢幕的物理大小(physical size)。
總之,sp用來設定字型大小,其他都使用dp就對了。
更多的討論詳見http://blog.csdn.net/welovesunflower/article/details/7930248
注意
一個尺寸資源是一個簡單資源,也就是說它是根據指定的name屬性的值來應用的(而不是含有它的XML檔案的名字)。因此,你可以將尺寸資源同其他的簡單資源放在同一個XML檔案的<resources> 元素下。
file location:
res/values/filename.xml
The filename is arbitrary. The
<dimen>
element's
name
will
be used as the resource ID.
resource reference:
In Java:
R.dimen.dimension_name
In XML:
@[package:]dimen/dimension_name
syntax:
<?xml version="1.0" encoding="utf-8"?><resources> <dimen name="dimension_name" >dimension</dimen></resources>
elements:
-
<resources>
-
Required. This must be the root node.
No attributes.
-
<dimen>
-
A dimension, represented by a float, followed by a unit of measurement (dp, sp, pt, px, mm, in), as described above.
attributes:
-
name
-
String. A name for the dimension. This will be used as the resource ID.
example:
XML file saved at
res/values/dimens.xml
:
<?xml version="1.0" encoding="utf-8"?><resources> <dimen name="textview_height">25dp</dimen> <dimen name="textview_width">150dp</dimen> <dimen name="ball_radius">30dp</dimen> <dimen name="font_size">16sp</dimen></resources>
This application code retrieves a dimension:
Resources res = getResources()
;float fontSize = res.getDimension
(R.dimen.font_size);
This layout XML applies dimensions to attributes:
<TextView android:layout_height="@dimen/textview_height" android:layout_width="@dimen/textview_width" android:textSize="@dimen/font_size"/>