基本知识
- px(pixel, 像素): 这是设计领域最小的度量单位,因此像素必定是整数,比如 1px。
- dp/dip(device independent pixel, 设备无关的像素): 这是 Android 独有的度量单位,这个度量单位出现的原因是:如果在开发中只规定像素,则会出现在分辨率高的手机上图很小,在分辨率低的手机上图很大。
- in(inch, 英寸): 1 in=2.54 cm。
- dpi(dots per inch)/ppi(pixels per inch): 一英寸中包含了几个像素,这表示屏幕的精细程度。这个可以通过”对角线的像素数(px)/屏幕对角线长度(inch)”得出。
- density: 密度,density=px/dp=dpi/160。
- sp: 与 dp 类似,但是用于字体。
- px=dp*density。
屏幕 | dpi范围 | density |
---|---|---|
ldpi | ~120dpi | 0.75 |
mdpi | ~160dpi | 1 |
hdpi | ~240dpi | 1.5 |
xhdpi | ~320dpi | 2 |
xxhdpi | ~480dpi | 3 |
xxxhdpi | ~640dpi | 4 |
当APP运行在某个手机上(假设是xhdpi),需要寻找名为back的图片,寻找规则:
- 先去最匹配的目录找,即drawable-xhdpi。
- 再去密度高的目录找,即drawble-xxhdpi, drawable-xxxhdpi,直到找到为止,并缩小对应的比例,比如xxxhdpi图片缩小2倍。
- 再去drawable-nodpi找,nodpi的图片显示在任何屏幕都不做缩放。
- 再去密度低的目录找,即drawable-hdpi, drawable-mdpi, drawable-ldpi,直到找到为止,并放大对应的比例,比如mdpi的图片放大2倍。
- 缩放规则:scale=屏幕的density / 图片的density。目标大小=原来大小*scale。
常见面试题
问:图片为100px*100px,放在drawable-xhdpi中,当前设备是xxxhdpi和mdpi的效果?
答:如果设备是xxxhdpi,根据公式,scale=4/2=2,即图片放大2倍,即图片显示的像素为200px*200px。如果设备是mdpi,根据公式,scale=1/2=0.5,即图片缩小2倍,即图片显示像素为50px*50px。
问:180dp在xhdpi和hdpi中分别是多少像素?
答:在xhdpi中,为180*2=360px;在hdpi中,为180*1.5=270px。
问:180dp的方块,分别放在3.5寸、4寸、4.5寸的手机上(都是xhdpi),效果分别怎么样?
答:因为三个手机都是xhdpi,因此密度一样,180dp的实际像素为360px,因此在三个手机上显示大小一样。