如果 Android 首先在 drawable 文件夹中找到资源,它是否更喜欢 drawable 文件夹?

Does Android prefer the drawable folder if it first finds a resource there?

我已将图像放入 drawable 文件夹和 drawable-xhdpidrawable-mdpidrawable-hdpi 文件夹中。

我知道 android 使用与屏幕密度兼容的图像,但我想知道如果相同的图像在 drawable 文件夹中 android 会做什么, android 是否优先考虑 drawable 文件夹,或者它会遵循相同的方法,并且不首先检查 drawable 文件夹中的图像。

它更喜欢最具体的。因此,仅当另一个文件夹中没有覆盖时,它才会使用可绘制文件夹。可绘制文件夹是放置 xml 可绘制对象的好地方,这些可绘制对象通常不受 dpi、屏幕尺寸等的影响。

您可以检查official doc

例如,这里有一些默认和替代资源:

res/
    drawable/ 
        icon.png
        background.png
    drawable-hdpi/ 
        icon.png
        background.png

hdpi 限定符表示该目录中的资源适用于具有 high-density 屏幕的设备。每个可绘制目录中的图像都针对特定的屏幕密度调整大小,但文件名完全相同。这样,您用来引用 icon.png 或 background.png 图像的资源 ID 总是相同的, 但 Android 选择最匹配的每个资源的版本当前设备,通过将设备配置信息与资源目录名称中的限定符进行比较。

res/drawable/res/drawable-mdpi/ 的同义词,为了在我们拥有密度之前的那一天向后兼容。放在 res/drawable/ 中的位图将被视为放在 res/drawable-mdpi/.

这就是为什么许多开发人员在将位图放入 res/drawable/ 并称其为好时被搞砸的原因 — Android 将其视为 -mdpi 并针对更高密度进行升级,通常会导致在 OutOfMemoryError.

恕我直言,在 res/drawable/ 中有位图是一种代码味道。