关于android drawable的奇怪问题

时间:2010-12-14 01:24:42

标签: android

我有一个视图,我使用SetBackgroundResource(R.drawable.led_red)动态分配背景。这几个星期工作正常,但突然它停止工作为我正在使用的图像之一(led_blue),即使我没有改变与这些图像相关的项目中的任何内容。即使相同的代码与led图像的其他变体一起正常工作,图像也不会出现。这种有问题的颜色在......之前也有效。

我尝试了很多东西,好像我向项目中添加了另一个图像,以便R.java中有问题的图像的id(0x7f020000)变为其他东西,它又开始工作了。但当然我不能简单地解决这个问题,因为除非我找到了发生这种情况的原因,否则未来可能会出现其他图像。

我添加的现在使用0x7f020000的新图像也不起作用,所以看起来它与这个个人ID有关但我无法理解它。

使用2.1 SDK

在设备和模拟器上都会发生这种情况

任何想法发生了什么?

感谢。

2 个答案:

答案 0 :(得分:2)

简答:
它是bug,已在Android 3.0及更高版本中修复。


答案很长:
在过去的几年中我也曾多次遇到过这个bug,但有一次我终于挖掘了源代码并发现它是由于低级资源缓存冲突错误而发生的。

值得庆幸的是,AOSP更改Ia971bb242ceac5e8f9346094009a10f356399ab9大约在同一时间修复了这一问题,2010年7月为reviewed and merged

然而,根据platform/frameworks/base git repository,直到2011年2月Honeycomb才发布。

2011年9月,由于大多数发布的设备仍然存在该错误,因此将其归档为Android bug 20283

支持早期设备的解决方法是添加一个空的<resources>文件,该文件首先按字母顺序排列(例如“a_workaround.xml”),从而增加其他drawable的资源ID。正如其他答案所述,空图像也可以。

答案 1 :(得分:1)

尝试添加空(1pixel_transparent)png文件,将其命名为a.png,因此它将首先使用id 0x7f020000。