IT开发者 - 云代码空间
—— 20141227
在项目开发的过程中,同一个布局对应不同的手机会显示出不同的效果。导致这个现象产生的原因是不同手机的分辨率不同。在android sdk提供的帮助文档中,我们可以看到各种手机的分辨率和对应的屏大小。QVGA (240x320),WQVGA400(240x400),WQVGA432 (240x432),HVGA (320x480),WVGA800 (480x800),WVGA854 (480x854)。
目前android手机的分辨率大致就是帮助文档中描述的几种,我们可以用两种方式进行不同手机的适配。一种是在java代码中,另外一种是在xml文件中。具体使用哪种方式更有效更合适,要看具体的情况而定。
在以前的项目中,我之前做过关于历史聊天记录,每页显示条数的匹配。不同的手机,每页可以显示历史记录的条数是不同的。我采用的是在java代码中做匹配。不同分辨率的手机,他们都有固定的屏高。例如,480x800,屏高是800,240x320,屏高是320。根据屏高为判定条件,为每一页显示历史记录的条数做一个限制。我个人觉得,在java代码中做手机匹配,要看匹配的布局中,控件是否太多,不太多,可以在java代码中根据不同的情况修改,否则,java代码将会显得很冗长,修改起来也很麻烦。
在xml进行手机匹配,主要是针对布局中控件太多,不方便在java代码中修改的情况。在xml中解决不匹配问题很简单,对于不同手机的分辨率,建立对应的layout文件即可。例如:480x800,之间建立layout-800x400,240x320,建立layout-320x240。特别注意:大的写在前面,例如800,320,小的写在后面,例如480,240。建立了相应的layout后,还要在不同的手机上调整布局中的控件大小和位置。
在本次项目中,我负责不同手机视图的匹配问题,我选择的是xml匹配方式,结果发现按上面的方式做了之后,对应分辨率的手机的显示没有任何的效果,后来,我查看帮助文档后,发现必须要在androidmainfest中进行如下代码的配置:
< supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
如果没有这几行代码,不管你怎么调整layout中的控件,对应分辨率的手机是没有任何效果的。注意:由于android版本的不同,有些版本不支持xlargeScreens,可以直接将android:xlargeScreens="true"去掉。