密度无关像素 (dp) 和可缩放像素 (sp) 对于构建布局和呈现字体至关重要,它们能够一致地响应构成 Android 设备的广泛的屏幕密度、尺寸类别、外形规格和宽高比。
要点
- 如果使用基准网格,请坚持使用 4 和 8 的测量单位。
- 使用 dp 和 sp 而不是像素来标注规格。
- 为所有密度分桶导出位图/栅格图形。
- 在设计时要有响应式思维,考虑到不同的尺寸类别、分辨率和宽高比。
- 密度无关像素 (dp):密度无关像素是灵活的单位,可在任何屏幕上缩放以保持统一的尺寸。它们基于屏幕的物理密度。这些单位相对于 160 dpi(每英寸点数)的屏幕,在此屏幕上 1 dp 大约等于 1 px。
- 可缩放像素 (sp):可缩放像素的功能与 dp 相同,但用于字体。sp 的默认值与 dp 的默认值相同。Android 系统会根据设备以及用户在其 Android 设备“设置”应用中设置的首选项来计算要使用的实际字体大小。

这些测量单位的主要区别在于,可缩放像素会保留用户的字体设置。对于出于无障碍功能目的而设置了较大文本的用户,字体大小会与其文本大小偏好设置相匹配。了解如何在 Compose 中更改字体大小。
Android 使用这些单位来帮助在各种设备和分辨率之间进行缩放和转换。
密度分桶
高密度屏幕每英寸的像素数比低密度屏幕多。因此,相同像素尺寸的 UI 元素在低密度屏幕上看起来更大,在高密度屏幕上看起来更小。这就是您不应以像素声明测量单位的原因。
Android 将屏幕密度的范围分组到“分桶”中,并使用它们为您的设备提供最佳的资源集。最常用的密度分桶是 mdpi
、hdpi
、xhdpi
、xxhdpi
和 xxxhdpi
(nodpi
和 anydpi
指不按设备分辨率缩放的分桶,通常用于矢量可绘制对象),每个分桶都对应您应用的一个资源文件。

dp 计算公式
dp = (像素宽度 * 160) / 屏幕密度
网格
基准网格
使用底层网格进行构建有助于在您的 UI 中创建一致的间距和对齐方式。Android UI 使用 8 dp 网格进行布局、组件和间距。
较小的元素(如图标、字体和组件内的一些元素)最好对齐到 4 dp 网格。

列网格
列构建网格结构,通过划分主体区域内的内容来为布局提供垂直定义。内容放置在屏幕中包含列的区域。与底层网格对齐以对齐内容,但应保持灵活的尺寸。了解如何在布局基础知识中设置列网格并应用内容的基本知识。

查看 Material 3 规范布局页面,了解在不同外形设备上创建灵活布局的详细信息。
尺寸类别
窗口尺寸类别是一组主观的视口断点,可帮助您设计、开发和测试响应式及自适应应用布局。Android 将窗口尺寸类别分为 3 类:Compact(紧凑)、Medium(中等)和 Expanded(展开)。阅读更多关于窗口尺寸类别的信息。
宽高比
宽高比是元素宽度与高度的比例。宽高比表示为宽度:高度。
为了保持布局的一致性,请对图片、表面和屏幕尺寸等元素使用一致的宽高比。
建议在您的 UI 中使用以下宽高比
- 16:9
- 3:2
- 4:3
- 1:1
- 3:4
- 2:3