"px"、"dip"、"dp"和"sp"之间有什么区别?

安卓系统的计量单位之间有什么区别?

  • px
  • dip
  • dp
  • sp
解决办法

来自Android开发者文档

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

2.> in

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

3.> 毫米

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

4.> pt

- 基于屏幕的物理尺寸,为1/72英寸。

5.> *dpdip

密度-独立的像素--基于屏幕的物理密度的抽象单位。这些单位是相对于一个160 dpi的屏幕,所以一个dp就是160dpi屏幕上的一个像素。dp与像素的比例 dp与像素的比率将随屏幕密度变化,但不一定是 变化,但不一定成正比。注意:编译器同时接受"dip"和 "dp",尽管"dp"与"sp"更一致。

6.> sp

Scale-independent Pixels - 这和dp单位一样,但它也会被用户的字体大小偏好所缩放。建议你在指定字体大小时 在指定字体大小时使用这个单位,这样它们就会被调整为 这样它们就会根据屏幕密度和用户的偏好进行调整。

摘自【了解Android中的密度独立性】(https://www.captechconsulting.com/blogs/understanding-density-independence-in-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      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+

更多信息也可以在谷歌设计文档中找到。

评论(11)

关于这一点以及如何实现对不同尺寸和密度的多个屏幕的最佳支持的几乎所有内容在这里都有很好的记录。

  • 支持多屏幕]1

屏幕尺寸
实际的物理尺寸,以屏幕的对角线来衡量。 为了简单起见,Android将所有实际的屏幕尺寸分为四种 一般化的尺寸:小、正常、大和超大。

屏幕密度 在屏幕的一个物理区域内的像素的数量。 屏幕上的像素数;通常被称为dpi(每英寸点数)。例如,一个 "低"密度的屏幕在一个给定的物理区域内有较少的像素。 与"正常"或"高"密度的屏幕相比。为了简单起见。 安卓系统将所有实际的屏幕密度分为六个一般的 浓度:低、中、高、特高、特高和特高。 特高-特高-特高。

方向
从用户的角度看屏幕的方向。 观点的方向。这要么是横向的,要么是纵向的,也就是说,屏幕的'纵横比是宽的。 纵横比分别为宽或高。要注意的是,不仅 不仅不同的设备在默认情况下以不同的方向操作 角度,而且当用户旋转设备时,方向也会在运行时发生变化。 > 旋转设备。

画面上物理像素的总数。 屏上的物理像素总数。当添加对多屏幕的支持时,应用程序不 不直接与分辨率打交道;应用程序应该关注的是

只关注屏幕的尺寸和密度,如通用的 尺寸和密度组。

与密度无关的像素(dp)
一个虚拟的 的像素单位,你应该在定义UI布局时使用,以表达 以独立于密度的方式表达布局尺寸或位置。 与密度无关的像素相当于160dpi屏幕上的一个物理像素。 dpi屏幕上的一个物理像素,这是系统为一个 "中 "字形屏幕假定的基准密度。 "中等" 密度的屏幕。在运行时,系统会透明地处理 在必要时,系统会根据实际的密度,透明地处理dpi单位的缩放问题。 使用中的屏幕的实际密度。dp单位到屏幕像素的转换是 很简单。 px = dp * (dpi / 160)。 例如,在240dpi的屏幕上,1dp 等于1.5个物理像素。在定义应用程序时,你应该始终使用dp单位 定义你的应用程序的用户界面,以确保在不同密度的屏幕上正确显示你的用户界面。 不同密度的屏幕上正常显示。

如果你真的想为一种以上的设备开发安卓应用,你应该至少读过一次屏幕支持开发文档。除此之外,了解拥有特定屏幕配置的活跃设备的实际数量,总是一件好事。

评论(5)

我将进一步阐述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的控件。你需要为支持的屏幕尺寸创建不同大小的图像。

  • 100 * 100 px图像用于mdpi
  • 150 * 150 px图像用于hdpi
  • 200 * 200 px图像用于xhdpi
评论(4)