Android Density (转)

模拟器上和真机确实存在差距,上了开发板后,发现在模拟器上跑的好好的布局都必须改变。

 


下面是转载的一篇文章,收藏在此。http://blog.csdn.net/xieyan0811/archive/2010/06/18/5931561.aspx

1.          什么是 density

1)         density
density
表示每英寸有多少个显示点 ( 逻辑值 ) ,它的单位是 dpi dot per inch ,通常屏幕大时, density 就大,屏幕小时, density 就小,通常

屏幕实际分辨率为 240px*400px 时, density=120
屏幕实际分辨率为 320px*533px
density=160
屏幕实际分辨率为 480px*800px density=240

2)         分辨率
是整个屏是多少点,比如 800x480 ,它是软件的显示单位

3)         Android1.6 版本开始支持 density( 对应 API Level 4)
用于解决应用在屏幕大小不同的硬件上正常显示的问题

2.          相关代码及设置

1)         AndroidManifest.xml


这个参数在
API Level 4 也就是 SDK 1.6 以后才启用的,而且 1.6 版本的 API Level 4 的应用默认值就是 True

2)         资源目录名( android 2.0 以后)
res/xxx-hdpi        
density 240 时,使用此目录下的资源
res/xxx-mdpi       
density 160 时,使用此目录下的资源
res/xxx-ldpi         
density 120 时,使用此目录下的资源
res/xxx                
不常后缀,为默认设置,同 xxx-mdpi

3)         资源单位( xml 文件中定义大小的单位)

a)        dp=dip=dx (Density independent pixel )
基于屏幕密度的抽象单位,设备无关的点,用于说明与密度无关的尺寸和位置。这些单位是相对于一个 160dpi 的屏幕,所有一个 dp 160dpi 屏幕上的一个点。

b)         px
px
指软件的单位点,设备相关的点

c)          具体使用

                                       i.               布局时尽量使用单位 dip ,少使用 px
若使用 px ,如果设某控件大小 400x400px ,在 800x480 上显示正常,而在 533x320 的屏上就超出屏幕了

若使用 dp ,如果设某控件大小为 160x160dp ,就可以通过从系统中取 density 来算出真正的大小,比如在 800x480 屏的 density 设为 240 ,而 533x320 屏的 density 设为 160 ,借以下公式计算
pixels = dips * (density / 160)
800x480 在屏中显示 240 象素,而在 533x320 的屏中显示为 160 象素,控件在屏中显示的比例是一样的。

                                      ii.               内部的处理过程分为三步:
screen 中其它元素,转为应用的值,计算应用各控件位置,然后再转成 800x480 以供真正显示
res-xxx 不存在,则读取 res 有的资源,然后对其做相应缩放

3.          实现 density 的关键源码

1)         BitmapFactory.java (用于缩放图片)

2)         ComptibilityInfo.java (用于位置计算)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值