Android 屏幕分辨率和屏幕密度

141 阅读2分钟

drawable 资源目录取决于其实际屏幕密度(dpi)

在 Android 中,drawable 资源的目录划分主要依据屏幕密度(dpi) ,而非直接依赖屏幕分辨率(1920x1080 这类像素尺寸)。对于屏幕密度为 213dpi 的设备,资源应优先放在 drawable-hdpi 目录。

具体分析:

  1. Android 屏幕密度的 “标准桶” 划分Android 将屏幕密度划分为多个 “标准密度桶”(density bucket),每个桶对应一个典型 dpi 值及范围,系统会根据设备实际密度匹配最接近的桶:

    密度桶典型 dpi包含的 dpi 范围
    ldpi1200 ~ 140
    mdpi(基准)160140 ~ 180
    hdpi240180 ~ 260
    xhdpi320260 ~ 340
    xxhdpi480340 ~ 560
    xxxhdpi640560 ~ 720
  2. 213dpi 对应的密度桶你的设备密度为 213dpi,落在 180 ~ 260 的范围内,对应 hdpi 密度桶(典型值 240dpi)。因此,系统会优先加载 drawable-hdpi 目录下的资源。

  3. 为什么不看分辨率? 分辨率(1920x1080)是屏幕的像素总数,而密度(dpi)反映 “每英寸的像素数”(决定 UI 元素的物理大小,如 1dp 对应多少像素)。相同分辨率的屏幕可能有不同密度(例如:1080P 屏幕可能是 320dpi 属于 xhdpi,也可能是 213dpi 属于 hdpi),因此资源目录只由密度决定。

  4. 资源加载逻辑若 drawable-hdpi 目录中没有所需资源,系统会自动从其他密度目录 “缩放” 资源:

    • 从更高密度目录(如 xhdpi)加载资源并缩小;
    • 从更低密度目录(如 mdpi)加载资源并放大。缩放可能导致资源模糊或拉伸,因此优先放在匹配的 drawable-hdpi 目录可保证最佳显示效果。

结论:

屏幕密度 213dpi 的设备,drawable 资源应优先放在 res/drawable-hdpi/  目录。