1.什么是屏幕尺寸、分辨率和像素密度?
屏幕尺寸
单位:英寸(inch) 1英寸 = 2.54厘米
目前市场上屏幕尺寸以5.5英寸为主(Android 2018年),数据由【友盟】提供。
推荐大家去看下,是一家数据统计网站,国内是比较知名的统计网站和工具。
屏幕分辨率:
定义:横纵向上的像素点 ( 分辨率越高,显示的效果越好)
单位:px 1px = 1像素点
一般表达的方式,纵向像素 * 横向像素 = 1920 * 1080
目前市场上手机屏幕分辨率 还是以1920*1080像素为主
屏幕像素密度
定义:指的是每英寸上的像素点 (密度越高,显示效果越好)
单位:dpi
像素密度与【屏幕尺寸】和【分辨率】有关
下面举个“栗子”
一部4.95英寸、屏幕分辨率是1920*1080的手机,求屏幕像素密度
手机4.95英寸,指的是手机对角线的长度
因为AC=1920,BC=1080,所以AB≈2203
所以像素密度 = 2203 / 4.95 ≈ 445
2.为什么我们要用android开发的时候不用px做为单位?
px(像素)
构成图像的最小单位
dp 、dip
密度无关像素 【注意,dip和dpi不一样】
如果在160dpi(像素密度为160),那么 1dip = 1px
在240dpi(像素密度为240),那么 1.5dip = 1px (后面会解释,别着急)
举个“栗子”
在2部手机中
A手机 分辨率为 480*320,像素密度为 160DPI
B手机 分辨率为 800*480,像素密度为 240DPI
A手机
B手机
如果我们图片要在A手机宽度铺满全屏显示的话,我们就得设置图片宽度为320px
我们要B手机宽度铺满全屏显示,需要设置多少?得设置480px。
那么问题来了,android手机那么多,分辨率并不是固定的(参考楼上分辨率数据),不像iPhone,屏幕的分辨率是固定的。我们想要图片在每部手机显示都是横向铺满的,设置px的话明显有问题。
所以,我们开发的时候单位一般设置为dp、dip
如果我们图片设置320dp,在480*320上,1dp=1px,所以图片是铺满的
在800*480手机上,1px = 1.5dp,所以320dp = 320dp * 1.5 = 480dp,所以图片也是铺满的
可能到这里小伙伴们头脑没转过来,为什么1px在不同分辨率手机上,等于的dp是不同的呢?
因为手机的像素密度不同啊!
上面说过dp、dip叫做密度无关像素,你可以这么理解,dp和dip存在的意义,是和像素密度没有关系的。我使用dp作为单位设置控件,不管你什么屏幕大小,多大的dpi,显示的效果始终保持一致。就是专门用于不同手机屏幕分辨率,我却能都适应。至于160dpi里1dp=1px,480dpi里1dp=1.5px,为什么这么设置呢?因为人家google就这么定义的。没必要深究
px和dp的换算公式:px = dp * (dpi / 160)
sp
定义:根据字体首选项进行缩放
sp绝大部分都是用来设置文字大小的大小.
google开发指导手册上推荐我们设置12sp以上大小的单位,不要用12sp以下,以为用户可能看不清。推荐使用大小有12sp、14sp、18sp和22sp作为我们首选的字体大小。
字体设置的时候 不能有 小数和奇数。因为字体放缩的时候可能对精度的丢失
最后如果大家有空就看下这个android design 对大家还是有些帮助的