近日改了个bug,在emulator下,我们使用了如下的配置模拟了真机的环境:
Target:Google APIs Level 7
Skin:Built-in WVGA800X480
Abstracted LCD density : 240
在ttsean拿到真机后,得知真机硬件配置为:
65536 TFT屏,7寸,800X480
在真机上出现了个很奇怪的bug:
- 使用xy的EditText竟然偏离了中线,和背景图不在同一条水平线上了
- 模拟器上的一切正常的图片在真机上竟然只占据了中间一小片空间
奇了怪了,明明是一模一样的配置,怎么会在真机上得不到真实体现呢?咨询了一下专业美工,后来发现,原来是我们误解了几个概念:
- Screen size (屏幕尺寸):具体的屏幕物理长度,以对角线长度做为标识,平时我们说的3”屏,7”屏就是指这个,是物理尺寸
- Resolution (分辨率):屏幕上总共的物理像素点,虽然经常被以800X600之类的来描述,但是在android中,他并不指代具体的屏幕宽高比例,注意,分辨率和屏幕大小没有任何联系,分辨率只是描述点的而已,所以相同分辨率下,屏幕越小,越清晰
- density(密度) :表示每英寸有多少个显示点,density是以分辨率为基础,即指在固定分辨率上散开的像素点,也即是说屏幕的density越大,单位上分散的像素就越多,可以理解为点距就越小,这样如果某个元素是以px为单位的,那么在低密度的屏幕上就会变大,应用程序可以通过指定high-dpi等三种资源来实现平台的独立性
- 另外和android平台相关的还有的概念:
- ASPECT RATIO (宽高比例):也就是平时我们说的4比3之流
- Density-independent pixel(dip):dip是一种虚拟的像素单位,专门用来给程序定义UI用,Android高度推荐使用这个,可以为不同的dip设置不同的资源进行自动切换 pixels = dips * (density / 160)即dip相当于屏幕density=160时的一个像素点,density=160时是一个点显示一个像素,而density=240时是3个点显示两个像素,图像看起来大一些,真实像素只有1280*2/3px,800*2/3px。
- Dot per inch(DPI) :
就是一英寸上显示的点,而这个点并不是意义上的像素。一般来说,显示器是96DPI,也就是说96像素等于1inch,但实际上不应该是这样,因为显示器的分辨率可以调整。对于你上面所说的显示器设置,96DPI可以理解为用96象素来表示一英寸,而变成120DPI的时候,是用120像素来表示一英寸,而系统的对象(字体,图像)的是用英寸数来表示的,所以120DPI时,图象和字体就变大了。
就是一英寸上显示的点,而这个点并不是意义上的像素。 一般来说,显示器是96DPI,也就是说96像素等于1inch,但实际上不应该是这样,因为显示器的分辨率可以调整。
对于你上面所说的显示器设置,96DPI可以理解为用96象素来表示一英寸,而变成120DPI的时候,是用120像素来表示一英寸,而系统的对象(字体,图像)的是用英寸数来表示的,所以120DPI时,图象和字体就变大了。 - 色阶 :也就是平时我们说的 65536色,26万色,1600万色并没有数字看起来差别那么大,这实际上只是表示相邻的三个色阶而已,当然,1600万色显示效果是最好的
看来明白事情的所以然才是解决问题的最根本所在,Android平台开发和我们传统从事的web有很大区别,比如这里的屏幕问题,手机屏幕千万种,具体的解决思路还没阅读完,等阅读完了我会继续补完这份资料,争取以后不要再次遇到相同问题
最后提供点资料给大家学习