关注

Android Drawable目录ldpi、mdpi、hdpi、xhdpi、xxhdpi屏幕密度适配

在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 DPI0.75x240x320
mdpi中密度~160 DPI1x320x480
hdpi高密度~240 DPI1.5x480x800
xhdpi超高密度~320 DPI2x720x1280
xxhdpi超超高密度~480 DPI3x1080x1920
xxxhdpi超超超高密度~640 DPI4x1440x2560 (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.75ldpi
0.75 - 1.125mdpi
1.125 - 1.5hdpi
1.5 - 2.0xhdpi
2.0 - 3.0xxhdpi
≥ 3.0xxxhdpi

示例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技术社区

原文链接:https://blog.csdn.net/sangok/article/details/154489141

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--