首先,关于我正在做的事情的一些背景知识。 如果您熟悉一般的参考文献(简单概念),请跳到第2部分 。
通常,我们会在drawable-mdpi
,drawable-hdpi
等文件夹中使用drawable。例如:
/drawable-mdpi
./figure.png (24x24 pixels)
/drawable-hdpi
./figure.png (36x36 pixels)
[...]
然而,另一种实现(相同?)行为的方法是在drawable-nodpi
内定义相同的drawable,大小不同,然后引用values-mdpi
,values-hdpi
中的每个大小,等等通过可绘制的参考文献。例如:
/drawable-nodpi
./figure_24.png
./figure_36.png
/values-mdpi
./refs.xml
/values-hdpi
./refs.xml
每个refs.xml
文件应包含这样的行(/values-mdpi/refs.xml
的示例):
<item name="figure"
type="drawable">@drawable/figure_24</item>
这样,您可以引用与没有引用相同的R.drawable.figure
。我发现当你需要在不调整大小的情况下处理不同尺寸的相同图像(例如,在24/36/48/72和48/72/96/144中使用相同的图像)时,这会很有用,因为你可以引用相同的图像两次(例如,再次,48和72px图像),而无需复制图像(从而避免膨胀的apk大小)。
众所周知,Android不需要所有桶密度来正确显示可绘制的[1]。例如,您可以完全省略drawable-ldpi
,它会在其他drawable-*
文件夹中加载并缩放,并在测试密度中以适当的大小为您呈现。事实上,许多应用程序(包括来自Google)已经省略了ldpi而没有人注意到。
但是,我注意到,当使用drawable引用时(参见上面的第1节),此行为会发生变化。如果我省略密度文件夹中的参考xml文件,并尝试在该密度中显示该drawable,Android将检索最高密度可绘制变体,但不根据该密度调整其大小。
让我举个例子来说明一点:如果使用引用的drawable,我省略values-ldpi/refs.xml
,Android将从values-xxhdpi
(我为此任意drawable提供的最高值)中检索drawable以xxhdpi对应的大小显示此值,而不是ldpi。因此,ldpi设备中显示的任何布局都将具有巨大的图像。见下图:
A)即使缺少LDPI drawable,普通drawable也能正常工作:
A)如果缺少一个密度参考(我没有在values-ldpi/refs.xml
中提供明确的变体),参考的drawable不起作用:
答案 0 :(得分:1)
没关系,我现在在ldpi模拟器中进行了测试,但它确实有效。因此,它只是影响IDE中布局预览窗格的那些错误之一。
是的,我应该在询问之前在ldpi模拟器中进行测试。 :)