800X400模拟器运行android4.0 状态栏(SystemUI)报错问题解决总结
2012-07-29 19:13
253 查看
在800x480下运行6575模拟器报错,而在低分辨率下没有问题,第一感觉,程序应该是没多大问题的,应该是资源的问题。打开DDMS,跟踪到错误信息是ArrayList下标超出范围,找到对应的
代码:
if (slotId == Phone.GEMINI_SIM_1)
{
mLastDataTypeIconId = tempDataTypeIconId;
v = mDataTypeconViews.get(0)
} else
....
程序没有防范措施,可见程序默认这里面必须有一个Item,加下
if (mDataTypeconViews.Size() >= 0) 防范处理后,虽然不报错,但系统显示不正确,所以还得查找根源。
经过一番跟踪,发现给mDataTypeconViews(ArrayList)填充的值来源于一个Layout上的控件(通过findId),于是查看资源(/frameworks/base/packages/SystemUI/res),发现两个问题:
1.程序中指定的布局 status_bar_notifications_panel没有在通用目录: layout或layout-port中实现,而存在于特定的屏幕:layout-sw600dp中。
2.很大一部分图标在 drawable-hdpi和drawable-mdpk中有(430个),而在drawable-xhdpi中只有140来个。
问题已经很清晰了:
运行的模拟器800X480很显然属于高分辨率,而系统自动适drawable-xdpi中的图标,android系统中,图片资源只能从高往低适配(例如,mdi中没有,就找hdpi中的图片),或从通用往特定适
配(drawable可以适应drawable-mdpi或drawable-hdpi等等),但不会从低往高适配,而drawable-xdpi要求的显示要比drawable-hdpi高一个层次,所以就出错了。
layout也有同样的问题。
解决办法:
在res下,将drawable-hdpi下的所有图标复制到drawable-xdpi(不要覆盖原来的)。将layout-sw600dp下的内容复制到 layout。重新编译资源和程序,并打包systemimage(make snod),模拟
器运行正常。
代码:
if (slotId == Phone.GEMINI_SIM_1)
{
mLastDataTypeIconId = tempDataTypeIconId;
v = mDataTypeconViews.get(0)
} else
....
程序没有防范措施,可见程序默认这里面必须有一个Item,加下
if (mDataTypeconViews.Size() >= 0) 防范处理后,虽然不报错,但系统显示不正确,所以还得查找根源。
经过一番跟踪,发现给mDataTypeconViews(ArrayList)填充的值来源于一个Layout上的控件(通过findId),于是查看资源(/frameworks/base/packages/SystemUI/res),发现两个问题:
1.程序中指定的布局 status_bar_notifications_panel没有在通用目录: layout或layout-port中实现,而存在于特定的屏幕:layout-sw600dp中。
2.很大一部分图标在 drawable-hdpi和drawable-mdpk中有(430个),而在drawable-xhdpi中只有140来个。
问题已经很清晰了:
运行的模拟器800X480很显然属于高分辨率,而系统自动适drawable-xdpi中的图标,android系统中,图片资源只能从高往低适配(例如,mdi中没有,就找hdpi中的图片),或从通用往特定适
配(drawable可以适应drawable-mdpi或drawable-hdpi等等),但不会从低往高适配,而drawable-xdpi要求的显示要比drawable-hdpi高一个层次,所以就出错了。
layout也有同样的问题。
解决办法:
在res下,将drawable-hdpi下的所有图标复制到drawable-xdpi(不要覆盖原来的)。将layout-sw600dp下的内容复制到 layout。重新编译资源和程序,并打包systemimage(make snod),模拟
器运行正常。
相关文章推荐
- 解决 Genymotion 模拟器V5.0以上版本拖拽安装arm translation 后依旧不能正常运行apk的问题
- Android入门教程八之Genymotion模拟器运行黑屏问题解决
- 解决Android studio运行程序识别不了genymotion模拟器的问题
- 解决Android 2.2自带Camera不能在模拟器中运行的问题
- xp3中运行s60 v3模拟器,出现闪退问题的解决方法
- Xcode7---项目模拟器运行不了,一个月时间了,终于解决问题啦
- 解决Eclipse每次运行Android项目都重新打开一个模拟器问题
- 如何解决BB10 native SDK中部分Cascades C++ samples无法运行的问题(模拟器编译运行的步骤)
- Xcode5上面安装运行ios6模拟器的问题解决
- 搭建 Android X86 系统,替代AVD模拟器,解决运行效率慢的问题
- PowerShell中运行CMD命令的技巧总结(解决名称冲突和特殊字符等问题)
- 搭建 Android X86 系统,替代AVD模拟器,解决运行效率慢的问题(整理)====大全
- 帧动画低版本模拟器不运行的问题,完美解决
- cxfreeze打包工程文件生成.exe,运行exe出现闪退问题,相关解决办法总结
- Ubuntu学习总结-08 Ubuntu运行Shell脚本报 shell /bin/bash^M: bad interpreter错误问题解决
- Android4.0模拟器“谷歌输入法已停止运行”错误解决办法
- Google Maps Android API V2在Android SDK level 17模拟器上运行时的问题解决方法
- 模拟器与真机运行的背景图片不一样问题解决
- Google Maps Android API V2在Android SDK level 17模拟器上运行时的问题解决方法
- Xcode5上面安装运行ios6模拟器的问题解决