协慌网

登录 贡献 社区

“px”,“dip”,“dp”和 “sp” 之间有什么区别?

android 测量单位有什么区别?

  • PX
  • DP
  • SP

答案

来自Android 开发者文档

  1. PX
    像素 - 对应于屏幕上的实际像素。


  2. 英寸 - 基于屏幕的物理尺寸。
    1 英寸 = 2.54 厘米

  3. 毫米
    毫米 - 基于屏幕的物理尺寸。

  4. PT
    点数 - 基于屏幕物理尺寸的 1/72 英寸。

  5. dpdip
    密度非依赖像素 - 基于屏幕物理密度的抽象单元。这些单位相对于 160 dpi 的屏幕,因此一个 dp 是 160 dpi 屏幕上的一个像素。 dp 与像素的比率将随着屏幕密度而变化,但不一定是成正比的。注意:编译器同时接受 “dip” 和 “dp”,但 “dp” 更符合 “sp”。

  6. SP
    与比例无关的像素 - 这与 dp 单位类似,但它也会根据用户的字体大小首选项进行缩放。建议您在指定字体大小时使用此单位,以便根据屏幕密度和用户偏好调整它们。

了解 Android 中的密度独立性

+----------------+----------------+---------------+-------------------------------+
| Density Bucket | Screen Density | Physical Size | Pixel Size                    | 
+----------------+----------------+---------------+-------------------------------+
| ldpi           | 120 dpi        | 0.5 x 0.5 in  | 0.5 in * 120 dpi = 60x60 px   | 
+----------------+----------------+---------------+-------------------------------+
| mdpi           | 160 dpi        | 0.5 x 0.5 in  | 0.5 in * 160 dpi = 80x80 px   | 
+----------------+----------------+---------------+-------------------------------+
| hdpi           | 240 dpi        | 0.5 x 0.5 in  | 0.5 in * 240 dpi = 120x120 px | 
+----------------+----------------+---------------+-------------------------------+
| xhdpi          | 320 dpi        | 0.5 x 0.5 in  | 0.5 in * 320 dpi = 160x160 px | 
+----------------+----------------+---------------+-------------------------------+
| xxhdpi         | 480 dpi        | 0.5 x 0.5 in  | 0.5 in * 480 dpi = 240x240 px | 
+----------------+----------------+---------------+-------------------------------+
| xxxhdpi        | 640 dpi        | 0.5 x 0.5 in  | 0.5 in * 640 dpi = 320x320 px | 
+----------------+----------------+---------------+-------------------------------+
+---------+-------------+---------------+-------------+--------------------+
| Unit    | Description | Units Per     | Density     | Same Physical Size | 
|         |             | Physical Inch | Independent | On Every Screen    | 
+---------+-------------+---------------+-------------+--------------------+
| px      | Pixels      | Varies        | No          | No                 | 
+---------+-------------+---------------+-------------+--------------------+
| in      | Inches      | 1             | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| mm      | Millimeters | 25.4          | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| pt      | Points      | 72            | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| dp      | Density     | ~160          | Yes         | No                 | 
|         | Independent |               |             |                    | 
|         | Pixels      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+
| sp      | Scale       | ~160          | Yes         | No                 | 
|         | Independent |               |             |                    | 
|         | Pixels      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+

更多信息也可以在Google Design Documentation 中找到

要在真实设备上计算尺寸,可以使用应用。

几乎所有关于此以及如何获得对具有不同尺寸和密度的多个屏幕的最佳支持在这里都有很好的记录:

屏幕尺寸
实际物理尺寸,以屏幕对角线测量。为简单起见,Android 将所有实际屏幕尺寸分为四种通用尺寸:小尺寸,普通尺寸,大尺寸和超大尺寸。

屏幕密度
屏幕物理区域内的像素数量; 通常称为 dpi(每英寸点数)。例如,与 “正常” 或 “高” 密度屏幕相比,“低”密度屏幕在给定物理区域内具有更少的像素。为简单起见,Android 将所有实际屏幕密度分为六种通用密度:低,中,高,超高,超高和超额外超高。

方向
从用户的角度看屏幕的方向。这可以是横向或纵向,这意味着屏幕的宽高比分别为宽或高。请注意,默认情况下,不仅不同的设备在不同的方向上运行,但是当用户旋转设备时,方向可以在运行时更改。

解析度
屏幕上的物理像素总数。添加对多个屏幕的支持时,应用程序无法直接使用分辨率; 应用程序应仅关注屏幕尺寸和密度,如通用尺寸和密度组所指定。

密度无关像素(dp)
在定义 UI 布局时应使用的虚拟像素单元,以与密度无关的方式表达布局尺寸或位置。与密度无关的像素相当于 160 dpi 屏幕上的一个物理像素,这是系统为 “中等” 密度屏幕假定的基线密度。在运行时,系统根据使用的屏幕的实际密度,根据需要透明地处理 dp 单元的任何缩放。 dp 单位到屏幕像素的转换很简单: px = dp * (dpi / 160) 。例如,在 240 dpi 屏幕上,1 dp 等于 1.5 个物理像素。在定义应用程序的 UI 时,应始终使用 dp 单位,以确保在具有不同密度的屏幕上正确显示 UI。

如果您对为多种类型的设备开发 Android 应用程序非常认真,那么您应该至少阅读一次屏幕支持开发文档。除此之外,了解具有特定屏幕配置的活动设备的实际数量始终是一件好事。

我将详细说明 dp 如何转换为 px:

  • 如果在 mdpi 设备上运行, 150 x 150 px图像将占用150 * 150 dp的屏幕空间。
  • 如果在 hdpi 设备上运行, 150 x 150 px图像将占用100 * 100 dp的屏幕空间。
  • 如果在 xhdpi 设备上运行, 150x150 px图像将占用75 * 75 dp的屏幕空间。

反过来说:你想要在你的应用程序中添加一个图像,你需要它来填充一个100 * 100 dp控件。您需要为支持的屏幕尺寸创建不同尺寸的图像:

  • mdpi 的100 * 100 px图像
  • 150 * 150 px的 hdpi 图像
  • xhdpi 的200 * 200 px图像