一、字段
1.density(密度):描述设备屏幕一个区域内占用多少像素,不同的设备有不同的密度,是个概念名称,单位为dpi
2.dpi:dots per inch ,来表示某一英寸内的像素点,是密度的单位。一个设备可能支持多个分辨率,故dpi会根据像素变化(很多设备支持多分辨率切换)
3.px(像素):屏幕基本单位
4.dp:Density-independent pixel根据设备的density的不同,计算后与px的比值为
px/dp=当前设备dpi/160
5.inch(英寸):屏幕对角线长度,1 inch = 2.54cm
6.resolution(分辨率):设备屏幕的总像素点
二、dp和px使用理解
网上看到大多数对dp理解文章,之前也非常笃信。后来实际开发中发现并不只如此。网上讲的大多只是初步一半的解释,仔细翻过api文档中的朋友会发现:
Supporting Multiple Screens
http://developer.android.com/guide/practices/screens_support.html
支持多个设备屏幕,不同设备有不同的density,dpi会随分辨率变化,dp比值也会变化。故网上大多数讲情景都是设备dp/px=dpi/160相同的2个设备上运行时一致的。但当同一个apk在2个比值不相同的设备上运行时,效果肯定有很大差异的。
应用开发都希望用一个apk能在所有的设备上正常显示,效果一致,不需要再做第2次无用开发。
相信实现过的人,都有不同的实现方式。
下面是作者基于同一个apk在不同设备上的情景分析。
1.在同一个设备上,可能支持不同分辨率,密度不变,dpi会变化:
dp作为单位:此时能自动适应当前设备不同分辨率,正常显示。并且只需要一个布局文件即可。px作为单位:需要2套不同分辨率的布局文件
2.不同设备上,不同分辨率,不同密度:
dp作为单位:此时不一定能自动适应设备不同分辨率,当设备的dpi与之前正常显示的设备一直时,能正常显示。否则,同样需要2套dp的布局才能正常显示,见下图分析。
px作为单位:需要2套不同分辨率的布局文件
三、总结:
作者在实际开发中,主要是固定电视(最多也就遇到过4个尺寸的,2套分辨率)上开发,大多数还是用px作为基本单位,2套布局,1套高清资源。因为尽管各个厂家设备密度怎么变化,px永远是基本单位,能做到精确布局,但就是会增加一点维护成本。
在手机开发中,还是大多数用dp即可。方便快捷,能适应大部分机型。但是部分分辨率和尺寸又小的机子,用dp做不到完全适配,部分文字过长就会被遮挡。可以用多个value值来适配。
以上是自己的理解,欢迎纠正。