一、相关概念
1. android支持density的版本
Android从1.6版本开始支持density(对应API Level 4)
2. density
density值表示每英寸有多少个显示点,比如240就是每英寸240个点,它是针对设备的属性,它是屏幕物理长宽的扩展,给屏幕设置为低密度显示的内容少,同样的条件下,密度小的屏幕显示同样的按钮看起来大,高密度的看起来小
3. 分辨率
是整个屏是多少点,比如800x480,它是对于软件来说的显示单位,以px为单位的点
4. 设置density的效果
不同density下屏幕分辨率信息,以480dip*800dip的WVGA为例
density=120时 屏幕实际分辨率为240px*400px
density=160时 屏幕实际分辨率为320px*533px
density=240时 屏幕实际分辨率为480px*800px
二、相关代码及设置
1. AndroidManifest.xml
<supports-screens android:anyDensity="true"/>
<uses-sdk android:minSdkVersion="4"></uses-sdk>
2. 资源目录名(android 2.0以后)
res/xxx-hdpi 当density为240时,使用此目录下的资源
res/xxx-mdpi 当density为160时,使用此目录下的资源
res/xxx-ldpi 当density为120时,使用此目录下的资源
res/xxx 不常后缀,为默认设置,同xxx-mdpi
如果硬件相应的desity的目录不存在,系统会利用存在的density自动乘以系数计算出相应的density
3. 资源单位(layout xml文件中定义大小的单位)
1) dp=dip=dx (Density independent pixel)
基于屏幕密度的抽象单位,布局时尽量使用单位dip,少使用px
dip是应用用于定义UI的虚拟单位,用于说明与密度无关的尺寸和位置。
dip点等价于160dpi密度中的一个物理点,密度由平台决定,换算公式如下pixels = dips * (density / 160)
,
160DPI的密度系数是1例如240 dpi的屏幕,1个dip点等于1.5个物理点
2) px
设置的绝对点数, 如果使用更高density的系统, 控件就会变小
三、设置density
设置系统变量hw.lcd.density,可设置density
四、实现density的关键源码
1. BitmapFactory.java
2. ComptibilityInfo.java
五、参考
1. http://www.cnmsdn.com/html/201005/1275315384ID5529.html