一张图片在两台手机上显示不同,不能只看原文件的像素宽高。屏幕把多少像素放进同样长度的空间,会影响图片占据的物理大小;Android的资源密度规则正是为这种差异准备的。[1]
官方指南先区分像素与密度无关单位。相同像素数量,在不同密度屏幕上可能对应不同的物理长度;dp用于表达界面尺寸,基准密度下大致对应一个像素。这里的基准是资源适配关系,不是保证任何设备的实际尺寸完全相同。
对位图而言,页面说明,Android会选择适合当前密度的资源;缺少对应资源时,会寻找较合适的版本并进行缩放。没有密度限定的默认位图资源按基准mdpi理解,也可能根据设备密度预缩放。因而,同一个原文件被加载后的尺寸,未必仍等于文件中记录的像素尺寸。
文档列出的例子是:为mdpi准备的50×50像素位图,在没有hdpi替代资源的情况下,可被缩放为75×75像素,查询到的资源尺寸也反映缩放后的结果。[1] 这是官方用来解释机制的例子,不是本文在手机上进行的测试,也不能替代对某张实际图片的测量。
nodpi提供另一种资源限定。所读页面明确说明,标记为nodpi的资源不按当前设备屏幕密度缩放;它适合需要自己在运行时处理图片的情形。[1] 这条规则的范围是资源密度缩放。若图片后来被界面控件按布局尺寸显示,或应用代码另行绘制,最终外观仍要结合这些因素判断,不能把nodpi改写成“整条显示链路永远原样”。后者是本文对规则适用范围的分析。
定位一次图片显示差异时,本文建议分别记录资源所在目录、源图片尺寸、设备密度及实际控件尺寸。这样可以区分取到了哪份资源、加载时是否按密度处理,以及布局最终怎样使用它。只有截图而没有这些背景,通常不足以把模糊或大小变化归因到某一项配置。
本稿解释的是Android Developers的位图密度文档,页面标示最后更新为2026年3月5日UTC,本文于10月9日查阅;更新日期不写成首次发布日期。没有修改应用资源或运行模拟器,也未评价某个项目是否已完成多设备适配。理解nodpi省略的具体阶段,才能提出更准确的核对问题。
参考来源:[1] Android Developers,Support different pixel densities。
信息来源
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。