我想知道如果相关文件夹中没有精确缩放的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?
我知道有类似的问题已被提出,但它们不那么复杂且不那么具体,所以任何见解都会很棒!
答案 0 :(得分:2)
您无需为屏幕尺寸和密度的每种组合提供替代资源。系统提供强大的兼容性功能,可以处理在任何设备屏幕上呈现应用程序的大部分工作,前提是您已使用允许其正常调整大小的技术实现UI(如下面Best Practices中所述) )。 并检查此Density independence
在运行时,系统确保在当前屏幕上以最佳方式显示任何给定资源的以下过程:
系统使用适当的替代资源基于 当前屏幕的大小和密度,系统使用任何尺寸 - 和应用程序中提供的密度特定资源。对于 例如,如果设备具有高密度屏幕和应用程序 请求可绘制资源,系统查找drawable 与设备配置最匹配的资源目录。 取决于可用的其他替代资源,资源 具有hdpi限定符的目录(例如drawable-hdpi /)可能是 最佳匹配,因此系统使用此中的可绘制资源 。目录
如果没有匹配的资源可用,系统将使用默认值 资源并根据需要向上或向下扩展以匹配当前 屏幕大小和密度“默认”资源是那些资源 没有用配置限定符标记。例如, drawable中的资源是默认的可绘制资源。该 系统假定默认资源是为基线设计的 屏幕尺寸和密度,这是正常的屏幕尺寸和介质 密度。因此,系统会扩展默认密度资源 高密度屏幕和低密度屏幕向下,如 适当。但是,当系统正在寻找一个 密度特定的资源,并没有找到它 密度特定的目录,它不会总是使用默认值 资源。系统可以改为使用另一个系统中的一个 密度特定的资源,以便在何时提供更好的结果 缩放。例如,在寻找低密度资源时 如果没有,系统会倾向于缩小高密度 资源的版本,因为系统可以轻松扩展 高密度资源低至低密度0.5倍 与通过a缩放中密度资源相比,更少的工件 因子为0.75。有关Android如何选择的更多信息 通过匹配配置限定符来替代资源 设备配置,阅读Android如何找到最佳匹配 资源。