首页 / 开发笔记 / 界面与适配

界面与适配 / FIELD NOTE 03

截图里的 48 px,为什么不等于布局里的 48 dp?

用一个可复算的尺寸例子,理解逻辑密度、像素与界面测量的边界。

本文为基于公开技术资料编写的解释性教程。命令和输出示例不代表已在你的设备上验证;执行前请核对版本、目标设备和数据影响。

先区分测量对象

设计稿和截图中的长度通常以像素表示,而 Android 布局中的控件尺寸常用 dp。像素是图像中的采样单位;dp 是随逻辑显示密度缩放的布局单位。把截图测到的像素值直接填入 dp,会在高密度屏幕上得到明显偏大的控件。

还需要确认截图有没有被聊天软件、浏览器或图片编辑器缩放。只有原始截图中的像素尺寸,才能与设备渲染结果进行直接比较。显示器上看起来多大,并不是可靠的测量依据。

用公式还原一次换算

对 dp 与物理像素的常用换算,缩放系数是逻辑 dpi 除以 160。可以写成:

scale = densityDpi / 160
px = dp × scale
dp = px / scale

假设设备逻辑密度为 420 dpi,那么 scale 为 2.625。一个 48 dp 的控件,理论尺寸为 126 px。反过来,截图里 48 px 的间距约等于 18.286 dp。这些数值是计算示例,不代表某一具体手机的默认设置。

你可以用屏幕密度换算器复算,并对照常见密度档位。渲染最终需要落到像素网格上,实际测量可能存在取整差异。

逻辑密度不等于真实面板 PPI

设备的屏幕分辨率、对角线长度和真实 PPI,不能直接代替 Android 当前使用的逻辑 densityDpi。显示大小设置、测试覆盖值或厂商配置都可能影响布局缩放。

adb shell wm size
adb shell wm density

这两条是不带修改参数的查询命令。若输出含 Override 值,应记录覆盖状态。对具体应用窗口的准确测量,仍应结合该窗口使用的显示指标,特别是多显示器、折叠屏或兼容模式场景。

字体不要简单套用同一条公式

sp 除了密度,还需要响应用户的字体大小偏好。较新的 Android 字体缩放可能采用非线性方式,所以不要依靠一个固定乘数,把所有字号从 sp 手工换成 px。

布局尺寸与文字尺寸应分别验证。按钮高度对齐了,字体基线、字重、行高和内边距仍可能不同。排查时先分开测量容器边界和文字区域,再判断是哪一层造成偏差。

本站换算器只处理 dp 和 px,不把它包装成字体 sp 的准确换算工具。

一个可重复的截图对齐流程

  1. 保存未缩放的原始截图,并记录分辨率和当前逻辑密度。
  2. 先测固定边界,例如工具栏、按钮矩形和卡片边缘。
  3. 把测得的 px 换算成 dp,再与布局定义比较。
  4. 单独检查系统栏、窗口 inset 和字体设置。
  5. 修改后在同一设备状态下重拍,避免同时改变密度与布局。

这样能把“看起来差一点”转化成具体的尺寸差异。若只能拿到缩放后的图片,应明确标注近似结果,而不是声称已完成像素级一致性验证。

资料与进一步阅读

整理日期:2026-10-15。工具参数及平台行为请以所用版本的官方文档为准。内容原则 · 报告错误