在Android开发中,ldpi、mdpi、hdpi、xhdpi、xxhdpi和xxxhdpi是用于存放不同屏幕密度(density)的图片资源的目录。这些目录对应不同的屏幕密度倍数,以确保应用在不同分辨率的设备上都能有良好的视觉效果。
一、核心概念
分辨率(Resolution)
指屏幕上像素的总数,通常用水平像素数×垂直像素数来表示。
例如:1920x1080 表示屏幕水平方向有1920个像素,垂直方向有1080个像素。
分辨率越高,屏幕能显示的内容越多,图像越细腻。
屏幕密度(Screen Density)
指屏幕上每英寸的像素数,单位是dpi(dots per inch)。
计算公式:dpi = √(水平像素数² + 垂直像素数²) / 屏幕对角线尺寸(英寸)
例如:一个5英寸屏幕,分辨率1920x1080,则dpi = √(1920²+1080²)/5 ≈ 440 dpi。
屏幕密度越高,显示效果越细腻。
dpi(Dots Per Inch)
即每英寸点数,是衡量屏幕密度的单位。
dp(Density-independent Pixel)
这是一个虚拟单位,用于定义UI布局, 1dp等于160dpi屏幕上的1个像素。
换算公式:px = dp * (dpi / 160)
例如:在320dpi的屏幕上,1dp = 2px;在480dpi的屏幕上,1dp = 3px。
二、各目录详细介绍:
| 目录名 | 中文名称 | 密度标准 | 比例因子 | 示例分辨率 |
|---|---|---|---|---|
ldpi | 低密度 | ~120 DPI | 0.75x | 240x320 |
mdpi | 中密度 | ~160 DPI | 1x | 320x480 |
hdpi | 高密度 | ~240 DPI | 1.5x | 480x800 |
xhdpi | 超高密度 | ~320 DPI | 2x | 720x1280 |
xxhdpi | 超超高密度 | ~480 DPI | 3x | 1080x1920 |
xxxhdpi | 超超超高密度 | ~640 DPI | 4x | 1440x2560 (2K/4K) |
三、工作原理与示例
假设你的应用需要一个图标,在 mdpi 设备上设计的理想物理大小是 48x48 dp,设计师在 mdpi 基准下工作:他/她会创建一个 48x48 像素的图片。
你需要为不同密度提供缩放版本:
- mdpi:icon_save.png (48px * 48px) (基准)
- hdpi:icon_save.png (48px * 1.5 = 72px * 72px)
- xhdpi:icon_save.png (48px * 2 = 96px * 96px)
- xxhdpi:icon_save.png (48px * 3 = 144px * 144px)
- xxxhdpi:icon_save.png (48px * 4 = 192px * 192px)
- ldpi:可以忽略,或者提供 (48px * 0.75 = 36px * 36px)
四、设备如何选择目录
步骤1:计算设备密度与基准密度的比值
密度比值 = 设备实际DPI / 基准DPI(160)
步骤2:根据比值选择最合适的目录
| 密度比值范围 | 选择的目录 |
|---|---|
| ≤ 0.75 | ldpi |
| 0.75 - 1.125 | mdpi |
| 1.125 - 1.5 | hdpi |
| 1.5 - 2.0 | xhdpi |
| 2.0 - 3.0 | xxhdpi |
| ≥ 3.0 | xxxhdpi |
示例3
- 设备参数:280 DPI,720×1280 分辨率
- 密度计算:280 / 160 = 1.75 系统选择:xhdpi 目录
- 结果:应用会优先加载 res/drawable-xhdpi/ 中的图片资源
五、缩放计算
我们考虑一个ImageView,其布局设置为wrap_content,这意味着ImageView的尺寸会根据图片的原始大小(经过密度转换后)来调整。图片的显示尺寸是通过以下方式计算的:
- 图片的显示宽度(dp)= 图片的像素宽度 / 设备密度比例
- 设备密度比值 = 设备DPI / 160
例如,对于280DPI的设备,密度比例 = 280/160 = 1.75
如果当前有一张100px*100px的图片在imageview中展示,切高宽使用wrap_content的模式来展示
mdpi目录
计算过程:
- 缩放计算:密度标准160
- 物理大小:100px × (280/160) = 100× 1.75 = 175 px
- 对应的 DP 值:175 ÷ 1.75 = 100dp
- 结果:图片被放大,可能模糊

显示效果是这样的,与100dp的大小一致:

hdpi目录
计算过程:
- 缩放计算:密度标准240
- 物理大小:100px × (280/240) 约=116px
- 对应的 DP 值:116px ÷ 1.75 = 67dp
- 结果:图片被放大,可能模糊

显示效果是这样的:

xhdpi目录
计算过程:
- 缩放计算:密度标准320
- 物理大小:100px × (280/320) 约=87.5px
- 对应的 DP 值:87.5px ÷ 1.75 = 50dp
- 结果:图片被缩小,可能失真或模糊

因此,为了最佳效果,我们应该为每个密度目录提供按标准比例缩放图片,并尽可能覆盖所有密度目录。对于非标准密度的设备,Android系统会进行缩放,以尽量保持物理尺寸一致。
转载自CSDN-专业IT技术社区



