如果我为density qualified folder
(例如drawable-hdpi)定义了drawable,并且还在drawable-nodpi
中定义了drawable,那么high density device
会使用-hdpi
-nodpi
?
如果我更进一步,并为-land
文件夹设置相同的设置,那该怎么办?
答案 0 :(得分:49)
我不确定nodpi
的优先级是什么,但这绝不是问题。听起来你误解了nodpi
限定词。您不应将nodpi
用作设备密度桶中未提供的资产的后备。正确的后备是没有密度限定符的文件夹(例如drawable/
)。
如果系统无法找到设备密度的资产(例如,它是ldpi设备,而您没有drawable-ldpi
文件夹),它将回退到没有密度限定符的文件夹,* not nodpi
限定符。
当您想要指定将用于所有密度并且您不希望Android扩展的资源时,会使用nodpi
限定符。其他密度文件夹中的资产(例如drawable-xhdpi
)将缩放到实际屏幕大小。如果您使用nodpi
限定符,则不应在任何其他资源文件夹中提供该资源。
同样重要的是要注意,对于屏幕密度限定符,Android还倾向于使用较低密度的资源而不是不合格的资源。如果您有xhdpi设备,但只有drawable
和drawable-mdpi
文件夹,则Android会在非限定文件夹之前检查mdpi文件夹中的资产。
答案 1 :(得分:9)
drawable-nodpi 将绕过缩放, drawable 将使用默认缩放:
如果您的代码将进行自己的扩展,那么
drawable-nodpi 会很有效 (或没有缩放),你不希望Android预先缩放图像。
还有 drawable-anydpi ,只是为了让事情更加混乱。
如果不存在密度和屏幕规格的完全匹配,将使用没有规格的可绘制。在drawable之后将使用 drawable-nodpi 。
更新如果您同时拥有drawable和drawble-nodpi,则选择顺序是更复杂的规则,未记录或Android已损坏。通过实验,我证实了屏幕密度<1的设备。 xhdpi将正确选择可绘制图像。屏幕密度> = xhdpi的设备将选择drawable-nodpi。
选择规则: 1.选择匹配屏幕密度,其中之一:
答案 2 :(得分:8)
取决于。
首先,nodpi
不是后备文件夹。如果您有hdpi设备,系统将首先查找hdpi
文件夹。 nodpi
文件夹包含无意缩放的资源。
drawable/
可用作后备文件夹,以防设备密度特定资源不存在。
然后,如果我们查看屏幕像素密度(dpi)的可能限定符值,则列为:
注意:您应该将所有这些资源放在不希望缩放的drawable-nodpi
文件夹中。要支持多个屏幕,Android prefers to scale down a larger original image instead of scaling up a smaller original image。这些资源应该不出现在任何其他 drawable-qualifier 文件夹中,否则这些资源可能会被缩放到哪种方式会破坏整个目的。
还必须注意:
使用密度限定符并不意味着资源仅适用于该密度的屏幕。如果您不提供具有更好地匹配当前设备配置的限定符的备用资源,则系统可以使用最匹配的任何资源。
以下是系统用于查找最佳匹配的资源选择流程图:
答案 3 :(得分:3)
当不需要缩放图像/资产时,使用drawable-nodpi限定符。
其他密度文件夹中的Drawable(例如drawable-xhdpi)将缩放到实际的屏幕尺寸。
drawable-nodpi适用于所有密度设备的恒定尺寸。