如果res中没有匹配的drawable,Android如何获取drawable?

时间:2013-12-28 03:44:41

标签: android android-drawable image-loading

我想知道如果相关文件夹中没有精确缩放的drawable,Android如何获取并呈现drawable?

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

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

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

我知道有类似的问题已被提出,但它们不那么复杂且不那么具体,所以任何见解都会很棒!

1 个答案:

答案 0 :(得分:2)

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

在运行时,系统确保在当前屏幕上以最佳方式显示任何给定资源的以下过程:

  1. 系统使用适当的替代资源基于 当前屏幕的大小和密度,系统使用任何尺寸 - 和应用程序中提供的密度特定资源。对于 例如,如果设备具有高密度屏幕和应用程序 请求可绘制资源,系统查找drawable 与设备配置最匹配的资源目录。 取决于可用的其他替代资源,资源 具有hdpi限定符的目录(例如drawable-hdpi /)可能是 最佳匹配,因此系统使用此中的可绘制资源 。目录

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

  3. enter image description here