1

一位朋友让我帮助调试她的应用程序。该应用程序为多种类型的设备配置提供了可绘制对象。

在三星 Galaxy Mini 上,应用程序崩溃,因为它找不到任何匹配的资源。(如果所有资源都复制到drawable文件夹中,它可以解决问题。)我想知道崩溃的原因。

文件夹内容res如下:

资源文件夹

存储实际资源的唯一地方是drawable-large-tvdpi文件drawable-normal-*夹。其余文件夹仅包含用于调试目的的测试图像(例如drawable-mdpi,包含带有文本“MDPI”的图片,因此应用程序可以使用它来检测当前设备搜索资源的位置)。显然,崩溃并不是因为这些调试图像,而是因为应用程序找不到应用程序的 XML 引用的实际资源。

Galaxy Mini 具有“小”屏幕和“ldpi”密度。我的猜测是,由于没有包含实际资源的文件夹适用于“小”屏幕尺寸(它们具有“正常”或“大”限定符),Android 将找不到任何匹配的资源。(请记住,并非所有文件夹都存储实际资源。)我应该如何重新组织所有内容以确保应用程序不会在任何设备上崩溃?

(请注意,我当然阅读了相关的官方Android 文档。)

4

1 回答 1

3

好的,这有点令人困惑,但这个问题(有点)在文档中阐明。具体来说:

屏幕像素密度是唯一因矛盾而未被淘汰的限定词。即使设备的屏幕密度是 hdpi,drawable-port-ldpi/ 也不会被消除,因为每个屏幕密度都被认为是匹配的 [起初]。

在根据屏幕尺寸限定符选择资源时,如果没有更好匹配的资源,系统将使用为小于当前屏幕的屏幕设计的资源(例如,如果需要,大屏幕将使用正常尺寸的屏幕资源) )。但是,如果唯一可用的资源大于当前屏幕,系统将不会使用它们,并且如果没有其他资源与设备配置匹配(例如,如果所有布局资源都用 xlarge 限定符标记,但设备是普通尺寸的屏幕)。

因此,问题在于您为普通/大屏幕限定符(例如drawable-normal-ldpi)提供密度特定资源,但没有为小(drawable-small-ldpi)提供密度特定资源。

于 2013-06-27T12:44:45.030 回答