屏幕尺寸:指屏幕的对角线长度,单位是英寸,1英寸等于2.54厘米,常见尺寸有2.4,2.8,3.5,3.7,4.2,5.0,5.5,6.0等。
屏幕分辨率:指在纵横向上的像素点数,单位是px,1px为一个像素点,一般格式为纵向像素*横向像素,如1960*1080。
屏幕像素密度:相同尺寸情况下,分辨率越高,屏幕越清晰,即屏幕像素密度越大。屏幕像素密度指每英寸上面的像素点个数,单位是dpi,是“dot per inch”的缩写,计算方式如下图:
密度无关像素:单位dip或dp,是Density Independent Pixels的缩写,Android规定,在屏幕像素密度为160dpi的情况下,1dp=1px。而在像素密度为320dpi的情况下,1dp=2px,以此类推。计算公式:1dp=(像素密度/160dpi)*1px。
sp:全称cale-independent pixels,与dp类似,用于设置字体大小。
设置布局时,使用dp和sp(字体),不要直接使用px,这样才能保证屏幕适配。
dpi的范围划分
(表中像素密度范围后包前不包,如120~160为120<x<=160):及dp/sp/px换算比率(rate=像素密度/160dpi,dp=px/rate)
名称 | ldpi | mdpi | hdpi | xhdpi | xxhdpi | xxxhdpi |
---|---|---|---|---|---|---|
像素密度 | 0~120dpi | 120dpi~160dpi | 160dpi~240dpi | 240dpi~320dpi | 320dpi~480dpi | 480dpi~640dpi |
比率rate | 0.75 | 0.75~1 | 1~1.5 | 1.5~2 | 2~3 | 3~4 |
代表性分辨率 | 240*320 | 320*480 | 480*800 | 720*1280 | 1080*1920 |
通常我们都会用上面的代表性分辨率来计算rate,而从来没指定说是屏幕是几英寸的.比如很多文章里讲320*480的屏幕是160dpi,很容易就让人误解所有480*320的屏幕的像素密度都是160dpi,其实很不严谨,他们之间还有一个变量:屏幕尺寸,下面我们就来来计算一下这些经常拿来举例子的屏幕分辨率的屏幕是几英寸的情况下才是对应160dpi、320dpi等等。
屏幕尺寸=√(屏幕宽px)²+屏幕高px²/dpi,带入值计算得出:
480*320分辨率的屏幕,160dpi时的屏幕尺寸为√320²+480²/160=3.6英寸;
720*1280分辨率的屏幕,320dpi时的屏幕尺寸为4.589英寸≈4.6寸也就是市场上常用的4.5寸;
1080*1920分辨率的屏幕,480dpi时的屏幕尺寸为4.589英寸≈4.6寸也就是市场上常用的4.5寸;
使用场景:
正是因为dpi值其代表的特性,所以android项目的资源文件下存在以下目录:
drawable-ldpi ( 当dpi为120时,使用此目录下的资源)
drawable-mdpi ( 当dpi为160时,使用此目录下的资源)
drawable-hdpi ( 当dpi为240时,使用此目录下的资源)
drawable-xhdpi ( 当dpi为320时,使用此目录下的资源)
drawable-xxhdpi ( 当dpi为480时,使用此目录下的资源)
Android正是根据设备DPI值得不同,选择清晰度不同的资源使用,完成屏幕的适配。
Android的图标尺寸
像素密度 | 启动图标 | 欢迎页背景图 | 操作栏图标 | 上下文图标 | 系统通知图标(白色) | 最细笔画 |
---|---|---|---|---|---|---|
mdpi | 48×48 px | 320*480 | 32×32 px | 16×16 px | 24×24 px | 不小于2 px |
hdpi | 72×72 px | 480*800 | 48×48 px | 24×24 px | 36×36 px | 不小于3 px |
xhdpi | 96×96 dp | 720*1280 | 72×72 dp | 32×32 dp | 48×48dp | 不小于4 dp |
xxhdpi | 144×144 px | 1080*1920 | 96×96 px | 48×48 px | 72×72 px | 不小于6 px |
UI设计举例
比如UI设计师给的图是以750px的屏幕宽度作为标准的,例如一张图片的尺寸是100px*100px,或者字体大小为100px,则换算成android的dp和sp为(以xxhdpi屏为常用适配机型 rate = 320/160~480/160=2~3):(1080/750)*100/rate=144/2~144/3=48dp~72dp