
2.6 屏幕像素密度
在activity_main.xml文件中,我们以dp为单位指定了属性值。下面来看看dp到底是什么。
有时需要为视图属性指定大小尺寸值(通常以像素为单位,有时也用点、毫米或英寸1)。一些常见的属性包括文字大小(text size)、边距(margin)以及内边距(padding)。文字大小指定设备上显示的文字像素高度;边距指定视图部件间的距离;内边距指定视图外边框与其内容间的距离。
11英寸=2.54厘米。——编者注
在2.5节中,我们在各个带屏幕密度修饰的drawable(比如drawable-xhdpi)下准备了对应的图片文件,Android会用它们自动适配不同像素密度的屏幕。那么问题来了,假如图片能自动适配,但边距无法缩放适配,或者用户配置了大于默认值的文字大小,会发生什么情况呢?
为解决这些问题,Android提供了与密度无关的尺寸单位。运用这种单位,可在不同屏幕像素密度的设备上获得同样的尺寸。无须转换,应用运行时,Android会自动将这种单位转换成像素单位,如图2-9所示。

图2-9 使用与密度无关的尺寸单位时TextView的显示效果
px
pixel的缩写,即像素。无论屏幕密度是多少,一个像素单位对应一个屏幕像素单位。不推荐使用px,因为它不会根据屏幕密度自动缩放。
dp(或dip)
density-independent pixel的缩写,意为密度无关像素。通常,在设置边距、内边距或任何不打算按像素值指定尺寸的情况下,都使用dp这种单位。1dp在设备屏幕上总是等于1/160英寸。使用dp的好处是,无论屏幕密度如何,总能获得同样的尺寸。如果屏幕密度较高,那么密度无关像素会相应扩展至整个屏幕。
sp
scale-independent pixel的缩写,意为缩放无关像素。它是一种与密度无关的像素,这种像素会受用户字体偏好设置的影响。sp通常用来设置屏幕上的字体大小。
pt、mm、in
类似于dp的缩放单位,允许以点(1/72英寸)、毫米或英寸为单位指定用户界面尺寸。实际开发中不建议使用这些单位,因为并非所有设备都能按照这些单位进行正确的尺寸缩放配置。
在本书及实际开发中,通常只会用到dp和sp这两种单位。Android会在运行时自动将它们的值转换为像素单位。