来自可绘制资源的Resources$NotFoundException drawable-xhdpi。

10
我在查看我们的故障报告时,有时会从我们的应用程序收到这个错误报告。我不能确定实际问题是什么。该资源确实存在,大多数设备都能正常工作,但某些特定设备(例如 LG-E510 或 U8815)无法加载该资源。
有任何想法吗?
android.content.res.Resources$NotFoundException: File res/drawable-xhdpi/action_bar_search_icon.png from drawable resource ID #0x7f02007f
at android.content.res.Resources.loadDrawable(Resources.java:1714)
at android.content.res.Resources.getDrawable(Resources.java:581)
at com.actionbarsherlock.internal.view.menu.MenuItemImpl.getIcon(MenuItemImpl.java:384)
at com.actionbarsherlock.internal.view.menu.ActionMenuItemView.initialize(ActionMenuItemView.java:128)
at com.actionbarsherlock.internal.view.menu.ActionMenuPresenter.bindItemView(ActionMenuPresenter.java:192)
at com.actionbarsherlock.internal.view.menu.BaseMenuPresenter.getItemView(BaseMenuPresenter.java:176)
at com.actionbarsherlock.internal.view.menu.ActionMenuPresenter.getItemView(ActionMenuPresenter.java:178)

这个资源是否存在于drawable-xhdpi文件夹中?因为我们必须根据它们的分辨率来放置资源,这意味着低设备将使用ldpi文件夹中的资源,中等设备将使用mdpi文件夹中的资源,以此类推...所以首先要检查该资源是否存在于适当的文件夹中。 - Ajit
否则,将资源放入默认的可绘制文件夹中,以便系统在找不到合适资源时自动调用。 - vinoth
设备可以将资源从XHDPI降级到任何所需的密度,因此这不是问题。 - Martynas Jurkus
显然它正在xhdpi文件夹中明确搜索资源。它在那里吗?如果不是,它在drawable或drawable-hdpi中吗? - njzk2
资源是在xhdpi中,仅限于xhdpi。 - Martynas Jurkus
2个回答

9
正如您所说,如果手机/平板电脑访问xhdpi目录,则我们期望它会适当地缩放图像以适应屏幕。因此,我们期望如果资源存在于任何一个目录中,我们将永远不会看到ResourceNotFound异常。然而:
xhdpi仅在Android SDK 8中引入,因此如果您的目标是SDK 7及更早版本,则可能会遇到问题: 仅在Android应用程序中使用XHDPI可绘制对象? 另一个原因是Android无法访问xhdpi目录,是因为设备正在运行屏幕兼容模式:
{{link2:Android - 在res / drawable-xhdpi中放置的超大图像在平板模拟器上没有显示,为什么?}}
另一个可能的原因是,如果您的可绘制对象非常小,并且由于缩放而导致其尺寸中的一个舍入为零:
{{link3:由于宽度和高度而未找到Android资源}}
最后,一些Android的OEM版本可能会以非标准的方式实现此功能(例如,通过不搜索xhdpi目录来“增强性能”,如果他们的设备是hdpi): Android Drawable hdpi xhdpi mdpi ldpi 概念

-2

你应该将你的可绘制资源放在hdpi文件夹中。因为那些无法正常工作的手机像素较少,无法显示图像。只需重新定位文件即可。

编辑:它们像素较少是因为屏幕尺寸较小。


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