zoukankan      html  css  js  c++  java
  • px,dp,dip,sp,in,mm,pt详细分析

    px,dp,dip,sp,in,mm,pt详细分析

    px   :(pixels),屏幕的像素点,不同的设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。

    dip  :(device independent pixels),设备独立像素,这个和设备硬件有关,一般我们为了支持WCGA、HVGA和QVGA推荐使用这个,不依赖于像素。等同于dp。

    dp   :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1px。

    sp   :(scaled pixels—best for text size),带比例的像素,与dp相似,但还会根据用户的字体大小偏好来缩放。Google建议使用sp作为文本的单位,其它用dip。

    in    :(inches)英寸

    mm :(millimeters)毫米

    pt    :(points),磅,1/72 英寸

    针对dip和px 的关系,做以下概述:

    QVGA屏density=120;          QVGA(240*320)

    HVGA屏density=160;          HVGA(320*480)

    WVGA屏density=240;         WVGA(480*800)

    WQVGA屏density=120          WQVGA(240*400)

    density值表示每英寸有多少个显示点,与分辨率是两个概念。

    不同density下屏幕分辨率信息,以480dip*800dip的 WVGA(density=240)为例

    density=120时 

    屏幕实际分辨率为240px*400px (两个点对应一个分辨率)

    density=160时 

    屏幕实际分辨率为320px*533px (3个点对应两个分辨率)

    density=240时 

    屏幕实际分辨率为480px*800px (一个点对于一个分辨率)

    apk的资源包中

    当屏幕density=320时,使用xhdpi 标签的资源

    当屏幕density=240时,使用hdpi 标签的资源

    当屏幕density=160时,使用mdpi标签的资源

    当屏幕density=120时,使用ldpi标签的资源。

    不加任何标签的资源是各种分辨率情况下共用的。

    布局时尽量使用单位dip,少使用px

    dp与px换算公式:

    pixs =dips * (densityDpi/160). 

    dips=(pixs*160)/densityDpi

    dp与px转换的方法:

    public static int dip2px(Context context, float dipValue){

      final float scale = context.getResources().getDisplayMetrics().density;

      return (int)(dipValue * scale +0.5f);

    }

    public static int px2dip(Context context, float pxValue){

      final float scale = context.getResource().getDisplayMetrics().density;

      return (int)(pxValue / scale +0.5f);

    }

    如何获得设备的屏幕分辨率和屏幕密度?

    例如分辨率为480*800,密度为240的设备,方法如下:

    DisplayMetrics dm =getResources().getDisplayMetrics();

    可以获取到:

    dm.densityDpi=240

    dm.widthPixels=480

    dm.heightPixels=800

    名词解释

    Px(Pixel像素)

    不同设备显示效果相同。这里的“相同”是指像素数不会变,比如指定UI长度是100px,那不管分辨率是多少UI长度都是100px。也正是因为如此才造成了UI在小分辨率设备上被放大而失真,在大分辨率上被缩小。

    Screen Size(屏幕尺寸)

    一般所说的手机屏幕大小如1.6英寸、1.9英寸、2.2英寸,都是指的对角线的长度,而不是手机面积。我们可以根据勾股定理获取手机的宽和长,当然还有面积。

    Resolution(分辨率)

    指手机屏幕垂直和水平方向上的像素个数。比如分辨率是480*320,则指设备垂直方向有480个像素点,水平方向有320个像素点。

    Dpi(dots per inch 像素密度)

    指每英寸中的像素数。如160dpi指手机水平或垂直方向上每英寸距离有160个像素点。假定设备分辨率为320*240,屏幕长2英寸宽1.5英寸,dpi=320/2=240/1.5=160

    注意:该值对应于DisplayMetrics类中属性densityDpi的值

    Density(密度)

    指每平方英寸中的像素数。

    Density=Resolution/Screen size

    注意:在DisplayMetrics类中属性density的值为dpi/160,可用于px与dip的互相转换

    Dip(Device-independent pixel,设备独立像素)

    同dp,可作长度单位,不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。dip和具体像素值的对应公式是dip值 =设备密度/160* pixel值,可以看出在dpi(像素密度)为160dpi的设备上1px=1dip

    Sp(ScaledPixels 放大像素)

    主要用于字体显示(best for textsize)。根据 google 的建议,TextView 的字号最好使用 sp 做单位,而且查看TextView的源码可知 Android 默认使用 sp 作为字号单位。

    HD

    HD就是高分辨率数字电视的标准,分辨率为1280px x 720px,(720p/720i)

    FHD

    (Full FD),分辨率为1920px x 1080px , (1080p/1080i)

    QHD

    Quarter High Definition(FULL HD 1920×1080px的四分之一(面积)),分辨率为960x540px

    Android开发中为适配上述三个分辨率下的资源文件,各资源文件夹名为:

    HD:     drawable-sw360dp-xhdpi

    FHD:   drawable-sw540dp-xhdpi

    QHD:  drawable-sw270dp-xhdpi

    这里的sw<N>dp表示这个文件夹下面的布局文件只有在设备短边的最小宽带为N时才加载。例如设备是960x540px的分辨率,那么这个apk安装在你的设备上就会加载 layout-sw480dp里面的布局文件,注意Manifest.xml中还需要设置。

  • 相关阅读:
    java jar 后台运行
    【Objective-C】内存管理
    GitHub Gist 指南
    模板发送java邮件
    JDK环境配置
    新装mysql数据库登陆不上去(账号密码正确)
    一个简单的爬取b站up下所有视频的所有评论信息的爬虫
    hexo Nunjucks Errors 解决方法
    新版正方教务系统导出课程表-油猴脚本
    ACM-图论-同余最短路
  • 原文地址:https://www.cnblogs.com/superping/p/4075862.html
Copyright © 2011-2022 走看看