【问题标题】:How does Android fetch a drawables if there isn't a matching drawable in res?如果 res 中没有匹配的可绘制对象,Android 如何获取可绘制对象?
【发布时间】:2013-12-28 03:44:41
【问题描述】:

我想知道如果相关文件夹中没有精确缩放的可绘制对象,Android 如何获取和呈现可绘制对象?

例如,假设我正在尝试在 hdpi、大型且运行 Android 2.3 的设备上渲染可绘制对象。应用程序正在寻找的可绘制对象有 xhdpi、mdpi、xlarge 和 large,但不是 hdpi 或 large(无论出于何种原因)。

具体来说,我想知道 Android 如何决定要获取哪个 drawable?我会假设它会优先考虑更大的可绘制对象(xhdpi 或 xlarge),但它是否优先考虑 DPI 或屏幕尺寸?而且,它是否将缩放应用于http://developer.android.com/design/style/iconography.html 中列出的可绘制对象(即 xhdpi 可绘制对象将呈现为其实际尺寸的 1.5/2)?如果是这样,它会在内存中加载原始的可绘制对象还是缩放的可绘制对象?

此外,由于 Android 3.2+ 已弃用屏幕尺寸(大、xlarge),您如何为运行 2.2+ 的应用命名可绘制文件夹? drawable-large-sw600dp 可以在所有设备上工作,还是将可绘制对象复制到 drawable-large 和 drawable-sw600dp 中?

我知道有人问过类似的问题,但它们不那么复杂,也不那么具体,所以任何见解都会很棒!

【问题讨论】:

    标签: android android-drawable image-loading


    【解决方案1】:

    您不需要为屏幕尺寸和密度的每种组合提供替代资源。该系统提供了强大的兼容性功能,可以处理在任何设备屏幕上呈现应用程序的大部分工作,前提是您已经使用允许其优雅调整大小的技术实现了 UI(如下面的Best Practices 中所述)。 并检查此Density independence

    在运行时,系统通过以下过程确保在当前屏幕上尽可能地显示任何给定资源:

    1. 系统使用适当的替代资源基于 当前屏幕的尺寸和密度,系统使用任何尺寸- 和您的应用程序中提供的特定于密度的资源。为了 例如,如果设备具有高密度屏幕并且应用程序 请求一个drawable资源,系统寻找一个drawable 与设备配置最匹配的资源目录。 根据可用的其他替代资源,一个资源 带有 hdpi 限定符的目录(例如 drawable-hdpi/)可能是 最佳匹配,因此系统使用来自此的可绘制资源 目录。

    2. 如果没有匹配的资源,系统使用默认的 资源并根据需要向上或向下扩展以匹配当前 屏幕尺寸和密度 “默认”资源是那些 未使用配置限定符标记。例如, drawable/ 中的资源是默认的可绘制资源。这 系统假定默认资源是为基线设计的 屏幕尺寸和密度,这是一个正常的屏幕尺寸和中等 密度。因此,系统将默认密度资源向上扩展至 高密度屏幕和低密度屏幕向下,如 合适的。但是,当系统正在寻找一个 密度特定的资源,在 特定于密度的目录,它不会总是使用默认值 资源。系统可以改为使用其他之一 密度特定的资源,以便提供更好的结果时 缩放。例如,在寻找低密度资源时 不可用,系统更喜欢按比例缩小高密度 版本的资源,因为系统可以轻松扩展 高密度资源下降到低密度 0.5 倍,其中 与将中等密度资源缩放 1 倍相比,工件更少 系数 0.75。有关 Android 如何选择的更多信息 通过将配置限定符与 设备配置,阅读 Android 如何找到最佳匹配 资源。

    【讨论】:

    • 谢谢,但我很清楚这一点。我要问的是,当应用在您没有提供理想资产的设备上运行时会发生什么。
    • 感谢您的彻底回复。我认为这意味着 __DPI 优先于尺寸参考?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2012-05-22
    • 1970-01-01
    • 2011-11-27
    相关资源
    最近更新 更多