android dp sp px的区别与联系

翻译自:https://material.io/design/layout/understanding-layout.html#pixel-density

 

像素密度?

屏幕的像素密度在不同的手机上是不尽相同的。所以需要创建一个独立于像素系统的单位来适应不同平台的手机。

 

如何计算像素密度?

pixel density = width(or height) in pixels / width(or height) in inches. 简化:D = pxs/inches

像素密度(pixel density)的定义:单位英寸(inches)上的像素(pixels)数量,称作像素密度。像素密度越高,单位英寸上的像素就越多。

 

if D1 > D2 && pxs1 = pxs2, inches1 = pxs1/D1 = pxs2/D1 < pxs2/D2 = inches2 即 inches1 < inches2

即相同像素的UI组件在高像素密度的屏幕上显示较小。

 

 

密度的独立

密度的独立性表示在不同像素密度下展示图像的大小一致(物理尺寸一致)。

 

Density-independent pixels, written as dp(pronounced "dips")

独立于像素的密度,称作dp,能够适应不同的屏幕,展示统一物理尺寸的UI视图。

 

原质化UI设计就是采用此种单位来使用不同的屏幕密度。

 

安卓设备上的像素密度

当开发安卓应用时,若使用dp单位来显示组件,则能够在不同密度的屏幕上统一显示尺寸。

dp = (width in pixels * 160) / screen density;

一个dp与像素密度等于160的设备的一个px物理尺寸相同。

 

sp (可伸缩像素, Scalable pixels)

sp的功能与dp相同,但是作为字体单位。默认情况下,sp与dp的值是相同的。

两者主要的不同在于:sp保存了用户的偏好设置,比如无障碍设置(accessibility)时,设置了“大字体”,那么字体的大小会匹配大字体的大小设置,而不是手动设置的sp大小。