安卓UI基础--dp sp px解析

来源:互联网 发布:qq纯真ip数据库 编辑:程序博客网 时间:2024/06/01 16:28

一、基本概念

主要概念:

  • 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手机设置中字体大小后系统布局混乱的方法

0 0