网格和单位

密度无关像素 (dp) 和可缩放像素 (sp) 对于构建布局和呈现字体至关重要,它们能够一致地响应构成 Android 设备的广泛的屏幕密度、尺寸类别、外形规格和宽高比。

要点

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

这些测量单位的主要区别在于,可缩放像素会保留用户的字体设置。对于出于无障碍功能目的而设置了较大文本的用户,字体大小会与其文本大小偏好设置相匹配。了解如何在 Compose 中更改字体大小

Android 使用这些单位来帮助在各种设备和分辨率之间进行缩放和转换。

密度分桶

高密度屏幕每英寸的像素数比低密度屏幕多。因此,相同像素尺寸的 UI 元素在低密度屏幕上看起来更大,在高密度屏幕上看起来更小。这就是您不应以像素声明测量单位的原因。

Android 将屏幕密度的范围分组到“分桶”中,并使用它们为您的设备提供最佳的资源集。最常用的密度分桶是 mdpihdpixhdpixxhdpixxxhdpinodpianydpi 指不按设备分辨率缩放的分桶,通常用于矢量可绘制对象),每个分桶都对应您应用的一个资源文件。

mdpi has a density of x1, hdpi has a density of x1.5,
            xhdpi has a density of x2, xxhdpi has a density of x3, and
            xxxhdpi has a density of x4
图 2: 不同密度下的派对哈密瓜

dp 计算公式

dp = (像素宽度 * 160) / 屏幕密度

网格

基准网格

使用底层网格进行构建有助于在您的 UI 中创建一致的间距和对齐方式。Android UI 使用 8 dp 网格进行布局、组件和间距。

视频 1: 展示一个突出显示 8 dp 增量的 8 dp 网格

较小的元素(如图标、字体和组件内的一些元素)最好对齐到 4 dp 网格。

图 3: 8 dp 网格适用于大多数 UI 元素,而 4 dp 网格更适合图标等较小的元素

列网格

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

图 4: 四列网格

查看 Material 3 规范布局页面,了解在不同外形设备上创建灵活布局的详细信息。

尺寸类别

窗口尺寸类别是一组主观的视口断点,可帮助您设计、开发和测试响应式及自适应应用布局。Android 将窗口尺寸类别分为 3 类:Compact(紧凑)、Medium(中等)和 Expanded(展开)。阅读更多关于窗口尺寸类别的信息。

宽高比

宽高比是元素宽度与高度的比例。宽高比表示为宽度:高度。

为了保持布局的一致性,请对图片、表面和屏幕尺寸等元素使用一致的宽高比。

建议在您的 UI 中使用以下宽高比

  • 16:9
  • 3:2
  • 4:3
  • 1:1
  • 3:4
  • 2:3