提出这个问题,主要是因为当使用avd创建emulator时,当把大屏模拟器(如WVGA800)density从240调低时,对于很多未做兼容性处理的程序,包括android系统某些自带程序,屏幕会出现此种情况:
更有意思的是,samsung大吹特吹的galaxy tab addon emulator不修改density也存在这个缺陷(它的默认分辨率是1024*600).
要根治这个问题,需要修改sdk中core包的内容,对于使用真机做调试的开发人员,这个问题不是问题,在源码中修改sdk后随系统编译到真机即可.而对于使用模拟器测试程序的人来说,无疑是非常头疼的事情,模拟器运行状态时,是不能通过file explorer覆盖core包的,我想到的解决办法是找到模拟器实例在硬盘的存放位置,替换组件后再启动模拟器.
找到avd存放模拟器实例的位置:C:\Documents and Settings\Administrator\.android\avd,发现模拟器实例只存放了sdcard.img,cache.img,userdata.img和userdata-qemu.img.由此推测所有的同一版本的模拟器是共用的同一个system.img,于是切到sdk安装目录,把system.img移走,果然原来建好的模拟器已运行不起来,报找不到system.img.
我从公司服务器拖一个system.img过来替换原来的,发现同样跑不起来,看来这个system.img还非解耦合文件.
这样,我们就需要保留system.img的其它内容,而只抽换我们修改的core.jar.
接下来需要做的是打开并修改system.img并重新打包system.img,具体方法见:
http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack,_Edit,_and_Re-Pack_Boot_Images
如果要替换更多的sdk文件,按照上述步骤即可.