AndroidDensity
Android Density
1. 什么是 density
- density
density 表示每英寸有多少个显示点 (逻辑值),它的单位是 dpi:dot per inch,通常屏幕大时,
density 就大,屏幕小时,density 就小,通常
屏幕实际分辨率为 240px400px 时,density=120
屏幕实际分辨率为 320px533px,density=160
屏幕实际分辨率为 480px*800px,density=240
分辨率
是整个屏是多少点,比如 800x480,它是软件的显示单位从 Android1.6 版本开始支持 density(对应 API Level 4)
用于解决应用在屏幕大小不同的硬件上正常显示的问题
2. 相关代码及设置
- AndroidManifest.xml
这个参数在 API Level 4 也就是 SDK 1.6 以后才启用的,而且 1.6 版本的 API Level 4 的应用默认值就是
True
资源目录名(android 2.0 以后) res/xxx-hdpi 当 density 为 240 时,使用此目录下的资源
res/xxx-mdpi 当 density 为 160 时,使用此目录下的资源
res/xxx-ldpi 当 density 为 120 时,使用此目录下的资源
res/xxx 不常后缀,为默认设置,同 xxx-mdpi资源单位(xml 文件中定义大小的单位)
- dp=dip=dx (** Density independent pixel **)
基于屏幕密度的抽象单位,设备无关的点,用于说明与密度无关的尺寸和位置。这些单位是相对于一个 160dpi 的屏幕,所有一个 dp 是 160dpi
屏幕上的一个点。
px
px 指软件的单位点,设备相关的点具体使用
- 布局时尽量使用单位 dip,少使用 px
若使用 px,如果设某控件大小 400x400px,在 800x480 上显示正常,而在 533x320 的屏上就超出屏幕了
若使用 dp,如果设某控件大小为 160x160dp,就可以通过从系统中取 density 来算出真正的大小,比如在 800x480
屏的 density 设为 240,而 533x320 屏的 density 设为
160,借以下公式计算
pixels = dips * (density / 160)
在 800x480 在屏中显示 240 象素,而在 533x320 的屏中显示为 160
象素,控件在屏中显示的比例是一样的。
- 内部的处理过程分为三步: 取 screen
中其它元素,转为应用的值,计算应用各控件位置,然后再转成 800x480
以供真正显示
若 res-xxx 不存在,则读取 res 有的资源,然后对其做相应缩放
3. 实现 density 的关键源码
BitmapFactory.java(用于缩放图片)
ComptibilityInfo.java(用于位置计算)
(转载请注明作者及出处 http://xy0811.spaces.live.com/
)