转自:http://blog.csdn.net/yihui823/article/details/6735750
实验二
我们再回顾一下实验一的结论:
相同的dip,在不同分辨率的屏幕上,在屏幕的相对宽度是一样的。所谓相对宽度,可以理解为是控件占有屏幕的百分比。
desity :160 = px : dip
但是,我们仔细盘算一下这个公式,变换一下:
desity / 160 =px / dip => desity / px = 160 / dip
我们应该把之前的结论再加上一个条件,相同的desity和屏幕高度比。
我们再用实验来说明这个问题。
对比4
我们还是用之前的程序,在不同的虚拟机上看效果。对比1的时候,我们用的两个虚拟机:
虚拟机1:desity=120;height=320;比例:0.375
虚拟机2:desity=160:height=480;比例:0.333
可以看出,这两个比值是不同的,只是差别不大,所以可能我们肉眼看不出来。
我们把这个差别变大。建立一个和虚拟机1一样尺寸的虚拟机,但是desity不同。
虚拟机1:
pix-003
显示的效果如下:
pix-004
虚拟机5:
pix-011
是不是启动后发现屏幕小了很多,那是因为密度高了哦。
显示的效果:
pix-012
和之前的公式是一样的,在desity=160的时候,dpi和px是1:1的关系。现在按钮已经全屏显示了。
所以说,印证了我们之前从公式推出来的结论:
要想dpi显示的控件是与屏幕保持相对不变,那么屏幕分辨率改变的时候,屏幕的密度也必须同比例改变。
这是个很有趣的结论。也就是说,屏幕密度不变的时候,屏幕分辨率改变了,用dpi定位的控件还是会改变相对大小和位置。
那么就是说,在屏幕分辨率变大的时候,必须保持屏幕密度也变大,才能让dpi定位的控件保持相对不变。
我们把之前的结论修正一下:
相同的dip,在不同分辨率的屏幕上,如果分辨率与密度比例相同,那么在屏幕的相对长度是一样的。
desity :160 = px : dip
如果,desity = inch/px, 那么 desity / px = inch / (px*px)
也就是说,屏幕尺寸大增大到4倍,像素不需要增大到4倍,只需要增大到2倍就行了。想想看,的确是这样,因为屏幕密度增加了啊。