• Android中dip(dp)与px之间单位转换


    px   :是屏幕的像素点
    in    :英寸
    mm :毫米
    pt    :磅,1/72 英寸
    dp   :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1px
    dip  :等同于dp
    sp   :同dp相似,但还会根据用户的字体大小偏好来缩放。
    建议使用sp作为文本的单位,其它用dip

    针对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 (两个点对应一个分辨率)

    状态栏和标题栏高各19px或者25dip

    横屏是屏幕宽度400px 或者800dip,工作区域高度211px或者480dip

    竖屏时屏幕宽度240px或者480dip,工作区域高度381px或者775dip

    density=160时 

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

    状态栏和标题栏高个25px或者25dip

    横屏是屏幕宽度533px 或者800dip,工作区域高度295px或者480dip

    竖屏时屏幕宽度320px或者480dip,工作区域高度508px或者775dip

    density=240时 

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

    状态栏和标题栏高个38px或者25dip

    横屏是屏幕宽度800px 或者800dip,工作区域高度442px或者480dip

    竖屏时屏幕宽度480px或者480dip,工作区域高度762px或者775dip

    apk的资源包中

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

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

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

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

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

    dp与px换算公式:

    pixs =dips * (densityDpi/160). 

    dips=(pixs*160)/densityDpi

     

    dp这个单位可能对web开发的人比较陌生,因为一般都是使用px(像素)
    但是,现在在开始android应用和游戏后,基本上都转换成用dp作用为单位了,因为可以支持多种分辨率的手机.


    以下是这两个单位的概念:
    px (pixels)像素 –一个像素通常被视为图像的最小的完整采样,这个用的比较多,特别是web开发,页面基本都是使用像素作为单位的.
    dip或dp (device independent pixels)设备独立像素 — 这个和设备硬件有关,一般我们为了支持手机上多种分辨率,如WVGA、HVGA和QVGA,都会使用dip作为长度的单位
    在Android开发我们一般都可以不需要使用px的,但是某一些控件的属性没有直接支持dip,像下面的代码
    android.view.ViewGroup.LayoutParams.height
    android.view.ViewGroup.LayoutParams.width

    上面这两个属性的单位为像素,但是为了兼容多种分辨率的手机,我们需要最好使用dip,时候我们可以调用以下的代码进行转换.
    int heightPx= DisplayUtil.dip2px(this, 33);
    mTabHost.getTabWidget().getChildAt(i).getLayoutParams().height = heightPx;
    以上代码可以在我另一篇文章看得到.该功能是设置Tab的高度,单位是像素.以上的单位转换是为了支持多分辨率手机的.

     
    public static int dip2px(Context context, float dpValue) {
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int) (dpValue * scale + 0.5f);
    }
     
    public static int px2dip(Context context, float pxValue) {
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int) (pxValue / scale + 0.5f);
    }
  • 相关阅读:
    算法----(1)冒泡排序
    淘宝爬虫
    爬虫_豆瓣电影top250 (正则表达式)
    爬虫_猫眼电影top100(正则表达式)
    Android 简单调用摄像头
    Android 简单天气预报
    思维模型
    This view is not constrained, it only has designtime positions, so it will jump to (0,0) unless you
    Android studio preview界面无法预览,报错render problem
    Android studio 3.1.2报错,no target device found
  • 原文地址:https://www.cnblogs.com/qingtianhua/p/4126373.html
Copyright © 2020-2023  润新知