如果使用可绘制引用,Drawables不会缩放丢失的密度桶

时间:2014-09-01 22:16:00

标签: android drawable scaling android-resources android-drawable

首先,关于我正在做的事情的一些背景知识。 如果您熟悉一般的参考文献(简单概念),请跳到第2部分

1密度参考的概念

通常,我们会在drawable-mdpidrawable-hdpi等文件夹中使用drawable。例如:

/drawable-mdpi
    ./figure.png (24x24 pixels)
/drawable-hdpi
    ./figure.png (36x36 pixels)
[...]

然而,另一种实现(相同?)行为的方法是在drawable-nodpi内定义相同的drawable,大小不同,然后引用values-mdpivalues-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大小)。

2如果缺少

,密度参考不起作用

众所周知,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也能正常工作:

enter image description here enter image description here enter image description here

A)如果缺少一个密度参考(我没有在values-ldpi/refs.xml中提供明确的变体),参考的drawable不起作用:

enter image description here enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

没关系,我现在在ldpi模拟器中进行了测试,但它确实有效。因此,它只是影响IDE中布局预览窗格的那些错误之一。

是的,我应该在询问之前在ldpi模拟器中进行测试。 :)