概念:
dp(dip): device independent pixels(设备独立像素)
dip,就是把屏幕的高分成480分,宽分成320分。比如你做一条160dip的横线,无论你在320还480的模拟器上,都是一半屏的长度
上面的理解是错的,整个屏幕所拥有的dp是由px和dpi这两个硬件参数共同决定。
dp=px*160/dpi(由px=dpi/160*dp推出)
px:pixel(像素)
由手机硬件决定。
dpi:dot per inch每英寸像素
由手机硬件决定。
dpi=ppi=(√(横向分辨率^2+纵向分辨率^2))/屏幕尺寸)
计算了一下小米手机屏幕的PPI,4.0英寸、分辨率854X480,PPI(DPI)
=√(854^2+480^2)/4=244.912……≈245.
sp:scaled pixels(放大像素),主要用于字体显示。
pt:point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业。
布局参考表格:
全屏像素 | 常规DPI | 横屏dp |
竖屏dp |
|
mdpi | 480*320 | 160dpi | 320dp |
480dp |
ldpi | 800*480 | 240dpi | 320dp |
533dp |
xldpi | 1280*720 | 320dpi | 360dp |
640dp |
如果想设置布局占半个横屏,就可以在mdpi,ldpi设置为160dp。然后在xldpi设置为180dp。
SDK影响布局:
通常我们开发在XML布局里用到dp,但dp是受到两个硬件参数影响的,因此设置dp也可能引起不同设备的布局错位!
需要注意的是:我所使用的开发机为nexus3(1280*720、320dpi),项目设置为2.2时,它是以hdpi的模式运行。项目设置为2.2兼容4.1时,它是以xhdpi的模式运行。也就是说:在相同布局,相同设备的情况下,项目设置不同的SDK运行的可视布局也不一样!
普通的2.2与 加上以下代码的2.2 进行对比:
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
如何以相对位置进行布局:
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=173973
注:博客文章为本人原创,转载请标明出处为本人博客。http://www.cnblogs.com/TseChiHoi/。