最近在学习Android多分辨率的支持,参考下面三个网站,按所示的顺序参考。

http://blog.csdn.net/bingospunky/article/details/38683239

http://blog.csdn.net/andypan1314/article/details/6632533

http://zhidao.baidu.com/link?url=v8ZuF2rBPsI5aAfz3gcWuBRdI8744NwYZ_-Vow17MbiWdtdznH4i_m-EVVZdmv6B1HhXDBq6gL6MnpgyjIXbOq

关于概念我就不介绍了,通过查阅资料和自己的一些测试,在这里记录几个我自己的理解。

1.dip是干嘛的?屏幕一共有多少个dip?

Android1.5之前,只支持一种屏幕分辨率和屏幕尺寸,所以用像素来标示组件的尺寸就可以了。但是自从1.6支持多尺寸、多分辨率以后,就会有这样一个问题。这里假设(只是假设,可能现实中没有这样参数的设备,但是比例是合理的):两个设备A和B,分辨率的宽度分别是160像素和320像素,密度(dpi)分别为160和320。如果想以前一样用像素来标示宽度,在xml里都不知道一共有多少像素,怎么用像素来标示。即使把宽度设置成80像素,比如在A里显示0.4英寸宽,在B里显示0.2英寸宽,显然也是不合理的。

dip是一个像素无关的量。就是说设置宽度时用过dip(dip简写dp)作单位,等在设备上运行时,再转化成像素,转化的时候会根据当前设备的密度进行设置。比如刚才的例子,把宽度设置成80dip,在A里显示的是80像素,在B里显示的是160像素,他们在屏幕上显示的宽度都是0.4英寸。

至于屏幕一共有多少个dip,在讨论完多尺寸、多分辨率的对应后再给出。

2.关于不同尺寸和不同分辨率的对应。

正如前面文章中给出的,屏幕大小分为小、中、大,屏幕的密度分为低(ldpi)、中(mdpi)、高(hdpi),这样组合就有9种了,但是有很多组合是在现实中很少见到的。这里还要指出前面提到的分辨率最大的是480x854,不知道这个图是什么时候的,但是感觉已经过时了,现在720x1280分辨率的很多,像320x480这种或者更小分辨率的基本很少了。虽然数据有点过时,但是道理是相同的,所以这个图并不怎么影响使用。

在上面的9中组合里,有这么几种常见的

240的dpi是 120; 320的dpi是 160;480的dpi是 240; ( 480x854,540x960也是这个dpi)720的dpi是 320;
上面这些数据是从前面文章里拿过来的数据,前面的数字是分辨率的宽。数据是这个样子,但是像他这么写我认为是有些不妥的。应为分辨率的宽不是导致dpi的唯一原因。具体来讲,就是说240x(A)这种分辨率的屏幕,一般都是2.6寸~3.0寸,计算之后就是120dpi,后面的几种都是这个道理。关键是一种分辨率会对应一个一般的屏幕大小。

3.屏幕有多少个dip?

其实这里面的概念没有几个。关键弄明白谁影响谁就可以了。首先屏幕的大小是生产的时候决定的,屏幕的分辨率也是不变的,这两个量是自变量。由这两个数能计算出dpi,知道了dpi就知道一个dip是几个像素(这里计一个dip是n个像素),宽度一共有多少像素是知道了,也知道了n,那么他们的商就是宽度一共有多少个dip。

关于屏幕有多少个dip,我觉得高度上有多少并不重要,我们关心宽度上有多少就行。

3.a.在480x854以下的分辨率中,宽度是320dip。

3.b.720x1280分辨率,宽度360dip。

这两条数据只是说明一般的情况,但是分辨率不决定dip在宽度方向上的总数。

4.刚才提到屏幕大小和屏幕分辨率是自变量,那么这两个量具体是怎么影响dip的呢?

这里是我个人观点,没有查到相关资料,需谨慎参考。我们只讨论宽度的dip,这里需要注意一下,在求dpi的时候,用的是对角线的dot数量/对角线长度。所以分辨率的宽高比和屏幕实际的宽高比会影响宽度的dip数量。

首先,我们可以看到,中等大小的屏幕,无论是低中高分辨率,dip总数都是320.说明dip总数与屏幕的实际宽度相关,又由于在计算dip的时候用的基准密度是160dpi,所以可以得到,每一英寸宽度有160dip。现在来证明这点,我们假设其他因素相同,这里假设分辨率的宽度为A,屏幕实际宽度是b(英寸),那么屏幕宽度上总的dip为:

式(一)A/((A/b)/160) = 160*b。刚才我们假设其他因素相同,在被假设的因素里,能影响dip的是我们在式(一)里,用于计算实际设备的dpi是(A/b)(这里计为阿尔法),这个数是分辨率的宽度/实际宽度的英寸数,它并不是dpi,那么它和dpi有什么关系?如果分辨率的宽高比和屏幕实际的宽高比相同,那么阿尔法的值就是dpi,否则会有一些差距。

所以,得出我的结论:实际屏幕的宽度影响宽度的总dip,每英寸160dip;分辨率的宽高比和屏幕实际的宽高比影响屏幕宽度方向总的dip,屏幕实际宽高比(宽/高)增大,宽度方向上的dip总数减少。

5.ldpi、mdpi、hdpi、xhdpi包的关系。

在查资料是看到有人问这个问题:把一个240x240的图片放到mdpi的文件夹下,在ImageView设置宽度和高度都是wrap_content,但是实际显示的是360x360像素。原因是你把240x240的图片放到mdpi包下,意思就是再160dpi密度下该图片应该是240x240。实际的密度是240dpi,Android会替你做一个转化,把这个图片从适合160dpi转化到适合240dpi,就是260像素了。





更多相关文章

  1. Android(安卓)屏幕适配:最全面的解决方案
  2. Android(安卓)Drawable 分类笔记
  3. Android(安卓)TextView 属性设置
  4. Android(安卓)Dialog全屏显示
  5. [置顶] Android屏幕适配全攻略
  6. android:layout_weight属性
  7. 剖析Android(安卓)线性布局中的权重(layout_weight)(解答疑惑)
  8. Android(安卓)alertdialog的自定义添加按钮和添加点击
  9. Android屏幕适配出现的原因

随机推荐

  1. Android(安卓)aidl接口远程调用
  2. Android(安卓)Graphics - ColorFilter
  3. Android(安卓)设备 连接打印机
  4. Android(安卓)记住密码功能
  5. Ubuntu下编译android的linux内核
  6. Bluetooth in Android(安卓)4.2 and 4.3(
  7. Android下面的MD5加密
  8. build.prop生成及参数解析
  9. 深入理解数据结构
  10. android findViewById