
2.1.3 UI控件的常用单位
UI控件的常用单位有px、dp和sp,此外还可以使用mm、in、pt等。不同Android设备屏幕的dpi(像素密度)不同(如表2-3所示),dp和sp单位可以解决不同dpi下显示的差异问题,在显示前会自动根据dpi转换成相应的px单位值。Android项目中的控件大小主要使用dp作为单位,字体大小主要使用sp作为单位。
表2-3 屏幕像素密度

● px:像素(pixel),每个单位像素代表屏幕上的一个显示点。100px的图像在不同分辨率的手机上显示的大小是不同的,即使同样尺寸的屏幕,分辨率也可能不同,因此不建议使用该单位。
● dp:设备独立像素,等同于dip(density-independent pixel),转换公式为dp×dpi/160=px。160dpi的中密度手机屏幕为基准屏幕,此时1dp=1px。100dp在320×480(MDPI,160dpi)的手机上是100px,100dp在480×800(HDPI,240dpi)的手机上是150px,但它们都是100dp。不管屏幕的像素密度是多少,相同dp大小的元素在屏幕上显示的大小始终都差不多,因此控件多使用该单位。
● sp:与缩放无关的抽象像素(scale-independent pixel),与dp类似,转换公式为sp×dpi/160=px。当用户通过手机设置修改手机字体时,以sp为单位的字体会随着改变,因此字号多使用该单位。
提示:分辨率、屏幕大小、dpi和ppi
● 分辨率:手机屏幕的像素点数,一般描述成屏幕的“宽×高”。常见的分辨率有480像素×800像素、720像素×1280像素、1080像素×1920像素等。
● 屏幕大小:屏幕大小是手机对角线的物理尺寸,以英寸(inch)为单位。5英寸手机是指对角线长5英寸,5英寸×2.54厘米/英寸=12.7厘米。
● dpi(dot per inch):每英寸多少点,该值越高,图像越细腻。
● ppi(pixel per inch):每英寸多少像素,该值越高,屏幕显示越细腻。