这是不同密度管理的常见错误,因此这些是您问题的答案。
1.- 不,以您的资产存储方式,但是是的,“仅当您的资产位于当前密度的较低层次结构中时”例如:如果您有可绘制的资产(默认非特定密度)和可绘制的 ldpi 和您在中等密度设备中运行应用程序,操作系统将尝试将您的图像大小从 -ldpi 调整为您的密度(如果在图像中使用 dps 但会消耗内存)。操作系统处理资产的方式如下:
假设你有:
res-
-drawable
-icon.png
-drawable-ldpi
-icon.png
-drawable-mdpi
-icon.png
如果您在 HIGH Density 设备中运行应用程序,操作系统首先会尝试在 drawable-hdpi 中找到您的资产,但由于它不存在,它将开始向下层级结构直到找到它,所以在这种情况下它将在drawable-hdpi中找不到它,但会在drawable-mdpi中找到它并使用它来填充,一切都会好起来的,但会在内存中消耗资产中的密度差异。
现在,当操作系统进入资产文件夹层次结构并一直到最后并且没有找到任何东西时,您就会出现确切的错误,例如:
假设你有:
res-
-drawable-hdpi
-icon.png
如果你运行这个应用程序,在 HIGH Desnity Device 中它会完美运行,因为会在第一次尝试中找到资产并且永远不会沿着层次结构向下移动,对于 Extra High Density Device 也是如此,因为如果它在 drawable-xhdpi 中找不到它将在下一步中找到它,当沿着层次结构向下到 drawable-hdpi 并且工作得很好,但是对于 MEDIUM Density,首先它会尝试在 drawable-mdpi 中找到它,因为它不存在,将向下尝试在drawable-ldpi中找到它也没有运气,所以它会转到“默认(可绘制)”,这是一个很好的做法,包含平均大小的所有资产,至少使应用程序看起来模糊而不是崩溃,因为操作系统也找不到资产 BOOOM 没有找到资源,你有你的例外,这个机制适用于 Android 中的几乎所有资源
2.- 是的,您必须在 ldpi 中创建资产并将它们存储在 drawable-ldpi 或 drawable(默认 - 无密度)中,以使其看起来不错。
所有这些信息都来自一本书,如果您仍有疑问,请在 Eclipse 中创建一个空的 Android 项目,并注意 SDK 如何在每个密度中创建一个具有特定大小的 icon_launcher.png img 来准确处理此问题。根据我的经验,我发现始终处理所有密度很有用,但更重要的是让我的所有资产在默认文件夹中具有平均密度/质量,以避免这个确切的问题,以防你忘记一个密度发展,与其说是崩溃,不如说是一种模糊的资产。
希望这可以帮助。
问候!