dpi:dots per inch (像素/英寸),像素密度。 一英寸有多少个像素点,常见取值 120,160,240。
dip(dp):Density independent pixels ,设备无关像素。 一般我们为了支持手机上多种分辨率,如WVGA、HVGA和QVGA,都会使用dip作为长度的单位。dp是为了和sp统一对dip的简称 早期使用的是dip后来统一为dp。
px:屏幕的像素点。 最基本的图形长度单位。
sp:Scale-independent Pixel,与缩放无关像素。
分辨率: Resolution (分辨率)之的是设备屏幕横向和纵向的像素的个数。常见的手机分辨率有: QVGA(240×320像素)、HVGA(480×320像素)、WVGA(800×480像素)、720P(1280x720像素)、1080P(1920x1080像素)、2K(2560x1440像素)。
屏幕尺寸:屏幕的对角线。
屏幕比例:因为只确定了对角线长,2边长度还不一定。所以有了4:3、16:9这种,这样就可以算出屏幕边长了。
pt: point,磅。 是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用。
dpi:假设分辨率为:x*y像素。屏幕尺寸为L 则 dpi=√ (x²+y²)/L 屏幕分辨率长宽平方和开方除以屏幕尺寸
dp&px: px=dpi/160*dp
px: px单位不被建议使用。因为同样像素大小的图片在不同手机显示的实际大小可能不同。要用到px的情况是需要画1像素表格线或阴影线的时候,如果用其他单位画则会显得模糊。
dp:Android系统定义了四种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它们对应的dp到px的系数(density)分别为0.75、1、1.5和2,这个系数乘以dp长度就是像素数。在不同分辨率下显示的长度一样。不受分辨率影响,所以称之为设备无关像素。
sp:sp和dp很类似但唯一的区别是,Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时,1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。类似我们在windows里调整字体尺寸以后的效果——窗口大小不变,只有文字大小改变。 注意:sp使用后用户调整系统字体大小可能会影响到布局。 解决方法: 1、使用dp做字体单位。 2、重写getResource()方法,可以在activity基类(app中所有的activity都应该有继承于我们自己定义的一个activity类)中加上以下代码:
@Override public Resources getResources() { Resources res = super.getResources(); Configuration config = new Configuration(); config.setToDefaults(); res.updateConfiguration(config, res.getDisplayMetrics()); return res; }在这段代码中new出来了一个Configuration对象,并通过 setToDefaults() 方法将其设为了系统默认的配置,此方法要想生效需调用Resources的updateConfiguration (Configuration config, DisplayMetrics metrics)方法。
附录: 参考文章:
Android dpi 、 dip 、dp、sp、分辨率、屏幕尺寸、px、density 关系以及换算
Android中px、dp、dip、sp详解
两种解决修改android手机设置中字体大小后系统布局混乱的方法
