Android:无法将@drawable/picture转换为可绘制对象。

113
在我的drawable文件夹中,我有几张图片,它们都可以被正确引用。但是当我试图添加任何更多大小完全相同的图片到相同的文件夹中,并尝试引用它时,就会出现错误提示:"Failed to convert @drawable/picture into a drawable"。我已经尝试使用不同的名称来引用相同的图片,但仍然会出现相同的错误。我也在不同的XML布局中尝试过,但结果也是一样的。此外,这些图片的名字分别为"jack"、"abc"、"question_mark",符合字符规则,但错误信息仍然不断出现。如果您有关于如何解决问题的建议,那将非常感谢。谢谢!

2
出于某种奇怪的原因,一切都排好序了,突然在点击几次后它就能正常工作! 如果你遇到这个问题,我的建议是重新启动eclipse并确保每个东西都被正确引用和命名。 - Jack Trowbridge
2
有时候从头开始重建项目可以帮助解决这些Android SDK的问题。我曾经看到过一些奇怪的情况,它使用了错误的图片来绘制所有我的可绘制对象(没有错误,但对于每个可绘制对象都使用了与正确图片相邻的图片),可能是一个引用ID的问题。 - Guillaume
再次-1 Android,+1 Windows - mihai71
4
对我来说问题出在文件名中间的“-”符号。在将其改名后,Android Studio正常运行。 - martin.p
14个回答

202

重新启动Eclipse(不幸的是),问题将会消失。


我曾经遇到过drawable-normal-hdpi的问题,但是当我把我的图片放在drawable-hdpi中时,一切都没问题了。 - Yar
@DoctororDrive - 也许你的问题略有不同。你还有这个错误吗? - Androliyah
6
这个问题在 Eclipse 和 Android Studio 中都存在,真是挺有趣的。 - Mohammad AbuShady
@thgc,所以你想要浪费时间处理GC和其他Objective-C问题吗?现代编程语言已经为你解决了这些问题。 - Eonasdan
3
关闭/重新打开项目对我没有起作用,但退出/重新启动Android Studio确实有效。谢谢Aliyah。 - tmr
显示剩余4条评论

144

同时检查资源名称是否包含任何非法字符(例如我的图像中有一个“-”)


Android自带的图标包含像10-device-access-alarms.png这样的文件名,这会让Eclipse无法处理!谢谢。 - Noumenon
12
Android Studio 对这些文件名也会出现问题。将文件名重命名为下划线的形式可以解决这个问题。 - Cypress Frankenfeld
对我来说,它是空格字符“ ”。 - Efreeto
在我的情况下,空格是罪魁祸首。 - Saju
这对我来说也是个“-”,奇怪的是Android Studio没有标记出来这件事... - Haseeb Zulfiqar

56
如果重新启动Eclipse无法解决问题,请确保图像名称以字母字符(非数字)开头。

4
谢谢。Android会使用drawable名称在R文件中创建drawable id变量。例如,如果文件名以数字开头,则变量也将以数字开头,而Java语言不允许这样做。 - momo
9
请确保文本中不含有连接符“-”,例如“mic-back”是无效的,“mic_back”则是有效的。 - Markus
这是我的问题。Android网站上的图标包中所有图标都有前导数字。 - theblang
必须使用PNG格式吗?我正在尝试使用JPG格式。 - IgorGanapolsky

28

文件名 必须仅包含 abc...xyz 012...789 _ ., 并且位于资源文件夹中。

例如:

my-image.pngFalse
MyImage.pngFalse
my image.pngFalse
...
...

my-xml.xmlFalse
MyXml.xmlFalse
my xml.xmlFalse
...
...


25

这是因为您的图像名称包含“-”符号。唯一允许使用的字符是 [a-zA-Z0-9_.]。

谢谢


1
大写字母无效。如果您使用它们,Android Studio将会给出以下错误:Error:Execution failed for task ':app:mergeDebugResources'。
错误:无效的文件名:必须只包含小写字母和数字([a-z0-9_.])。
- LightMan

5

我在使用Android Studio时也遇到了同样的问题。无需重启IDE,只需关闭并重新打开项目即可解决该问题(确保输入的src是正确的)。


重建项目也会做到这一点。 - Mike
我执行了文件 -> 无效缓存 / 重启...,这也起作用了(可能有点过头了)。 - SMBiggs

3

在 Android Studio 中,你的资源(图片)文件名不能以数字开头,也不能包含任何大写字母。要解决这个问题,按照 Aliyah 所说的做法重新启动 IDE 即可。这个方法也解决了我的问题。


2

我在使用Android Studio时遇到了相同的问题。它是由于在Linux环境下运行导致文件没有自动获得扩展名所引起的。通过手动将“.png”添加到文件名的末尾,它可以识别文件类型并相应地加载。

如果您尝试在项目内进行重构重命名,Android Studio可能会出现问题,因为Android会立即尝试重新生成R文件。我不知道具体是什么原因导致错误,因为它指向的是一些看似随机的代码行,在我的情况下是一个注释。

解决方法:从drawable中删除,然后在项目外部重命名并再次添加。


2

简化文件名称,似乎文件名中的任何特殊字符都会导致错误。例如将“my-main-header.png”更改为“header1.png”。不确定原因,但它可以解决问题。


2
这是因为资源文件名在 R.java 中被转换为资源标识符,而 - 不是有效的标识符字符。 - laalto

1
如果您的命名约定正确,那么只需转到 文件 -> 无效缓存/重新启动.. 然后点击 无效缓存/重新启动.. 这在我的情况下有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接