px (pixels)像素
对应屏幕上的实际像素点。一般HVGA代表320x480像素,这个用的比较多。
dp (device independent pixels)设备独立像素,也称dip
逻辑长度单位,在 160 dpi 屏幕上,1dp=1px=1/160英寸。随着密度变化,对应的像素数量也变化,但并没有直接的变化比例。这个和设备硬件有关,一般为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
sp (scaled pixels — best for text size)比例像素
与dp类似,但是可以根据用户的字体大小首选项进行缩放。主要处理字体的大小,可以根据系统的字体自适应。
px和dp的换算公式:
px = dp * (density/160)
density 是屏幕密度,表示每英寸有多少个显示点,与分辨率是两个不同的概念.
例如,
在density=240,800px*480px屏幕上,320dp的宽度对应的像素是480px;
在density=160,800px*480px屏幕上,320dp的宽度对应的像素是320px,
所以,
使用dp(sp)能够保证显示质量,但不保证显示尺寸比例;
相反,使用px能够保证显示尺寸比例,但不保证显示效果。
注意:在160dpi屏幕上,px和dp是等价的。
android中的不同资源规格对应的屏幕密度:
hdpi = 240 , 状态栏和标题栏高各19px或者25dip
mdpi = 160 , 状态栏和标题栏高各25px或者25dip
ldpi = 120 , 状态栏和标题栏高各38px或者25dip
系统会根据设备的屏幕密度来选择hdpi, mdpi, ldpi相应的资源,如果没有加标签,则默认为mdpi。
图片资源的放置位置直接影响图片最终显示的大小:
例如drawable-hdpi没有图片,假如现在有一张图片10x10的a.png放在drawable-mdpi,设备屏幕密度为240dpi。
如果在layout描述该图片时使用wrap_content,那么最后图片显示的大小就变成15x15。这是因为系统在drawable-hdpii找不到图片,就在drawable-mdpi找,找到a.png后,根据密度不同,系统自动对图片进行调整,所以就变成了15x15。假如drawable-hdpi有a.png,则不加处理根据其图片大小10x10显示。当然,如果在layout描述该图片时声明宽高都为10px,那么系统无论在什么文件夹下找到图片一般不会影响图片的显示大小(在SeekBar等容器就算指定大小也有可能改变)。
显示效果的影响因素:
综上,显示效果的影响因素有:屏幕尺寸、屏幕密度、分辨率。
为了适应不同的设备,要注意drawable和layout资源。
例如,
在屏幕大小相同,密度不同的情况下,提供不同的drawable资源;
在屏幕大小不同,分辨率相同的情况下,提供不同的layout资源。
关于VGA (640 * 480)
FWVGA(Full Wide VGA) = 854 * 480
WVGA (Wide VGA) = 800 * 480
HVGA (Half VGA) = 320 * 480
QVGA (Quarter VGA) = 240 * 320
实用对照表:
屏幕 宽度 高度 尺寸 大小 密度
Type (Pixels) (Pixels) Range (inches) Size Group
QVGA 240 320 2.6 - 3.0 Small Low
WQVGA 240 400 3.2 - 3.5 Normal Low
FWQVGA 240 432 3.5 - 3.8 Normal Low
HVGA 320 480 3.0 - 3.5 Normal Medium
WVGA 480 800 3.3 - 4.0 Normal High
FWVGA 480 854 3.5 - 4.0 Normal High
WVGA 480 800 4.8 - 5.5 Large Medium
FWVGA 480 854 5.0 - 5.8 Large Medium
下面几个不太常用:
in (inches),英寸
mm (millimeters),毫米
pt (points)点,1/72英寸