【问题标题】:Drawables not scaling for missing density buckets, if using drawable references如果使用可绘制引用,可绘制对象不会因丢失的密度桶而缩放
【发布时间】:2014-09-01 22:16:00
【问题描述】:

首先,关于我正在做的事情的一些背景知识。 如果您对一般参考资料(简单概念)很熟悉,请直接跳到第 2 节

1 密度参考的概念

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

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

但是,实现(相同?)行为的另一种方法是在 drawable-nodpi 内部定义相同的可绘制对象,具有不同的大小,然后通过可绘制引用引用 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 和 72 像素的图像)而不复制图像(从而避免膨胀的 apk 大小)。

2 如果缺少一个密度参考将不起作用

众所周知,Android 不需要所有存储桶密度来正确显示可绘制对象 [1]。例如,您可以完全省略 drawable-ldpi,它会加载并缩放其他 drawable-* 文件夹中的那些,以测试密度中的适当大小为您呈现。事实上,许多应用程序(包括来自 Google 的应用程序)已经省略了 ldpi 并且没有人注意到。

但是,我注意到,当使用可绘制引用时(参见上面的第 1 节),这种行为会发生变化。如果我省略了密度文件夹中的参考 xml 文件,并尝试以该密度显示该可绘制对象,Android 将检索最高密度的可绘制变量,但不会根据该密度调整它的大小。 p>

让我举个例子让你更清楚:如果使用引用的drawable,我省略了values-ldpi/refs.xml,Android 将从values-xxhdpi(我为这个任意drawable 提供的最高值)检索drawable,并在大小对应于 xxhdpi,而不是 ldpi,因为它应该。因此,在 ldpi 设备中显示的任何布局都将具有巨大的图像。见下图:

A) 即使缺少 LDPI 可绘制对象,普通可绘制对象也能正常工作:

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

【问题讨论】:

  • 您如何使用这些资源? android:src 布局中的引用? android:background 布局中的引用?通过 Java 代码中的某些东西或其他东西?还有什么?
  • Hi Mark,这些例子是通过 ImageViews 中的 src 标签实现的。
  • 查看问题跟踪器,根据 Google,this should not work at all。我无法解释为什么您看到它在某些情况下有效,但在其他情况下无效。
  • @CommonsWare 没关系,它适用于设备/模拟器。它只发生在设计时,即在 Studio 中预览布局时。顺便说一句,我认为这个人没有正确解释这个问题(或者完全是另一个问题)。正如我们所看到的,他提到了可绘制文件夹本身的别名(可能是某种软链接文件),因为他从未提到使用values 引用。恕我直言,这并不完全清楚,因此为什么该问题首先被标记为“NeedsInfo”。感谢您的帮助。

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


【解决方案1】:

没关系,我现在在 ldpi 模拟器中进行了测试,它可以工作。因此,这是仅影响 IDE 中布局预览窗格的错误之一。

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

【讨论】:

    猜你喜欢
    • 2014-10-25
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    相关资源
    最近更新 更多