android中dppxsp的区别|Android中dp,px,sp的区分与理解

更新时间:2020-03-22    来源:小米路由器    手机版     字体:

【www.bbyears.com--小米路由器】

最近在做xml文件布局的时候,要用到获取屏幕的高度,我用的真机是小米2S,屏幕分辨率是1280*720,当然它的单位不是布局文件里的dp了,然后我上网查了一下分辨率的单位和dp之间的关系以及转换方式,在这里做了一个总结:

首先来看一下他们的基本概念:

px   :是屏幕的像素点
dp   :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1px
dip  :等同于dp
sp   :同dp相似,文本的单位

  针对dip和px 的关系,做以下概述: 1). px (pixels)像素 : 一个像素通常被视为图像的最小的完整采样,这个用的比较多,特别是web开发,页面基本都是使用像素作为单位的. 2). dip或dp (device independent pixels): 设备独立像素 — 这个和设备硬件有关,一般我们为了支持手机上多种分辨率,如WVGA、HVGA 和QVGA,都会使用dip作为长度的单位

下面来看一下手机屏幕类型和密度以及分辨率的对应关系

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值表示每英寸有多少个显示点,与分辨率是两个概念。   dp与px换算公式:
pixs =dips * (densityDpi/160). 
dips=(pixs*160)/densityDpi 但是我们在代码里面进行转化的时候还需要有一个偏移值:0.5f

像素和dp之间的转换

 代码如下

public int Dp2Px(Context context, float dp) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dp * scale + 0.5f);
}

public int Px2Dp(Context context, float px) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (px / scale + 0.5f);
}

这里我把获取屏幕高度的代码也贴上来吧:

 代码如下 DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;   我们看到,这里的scale是在这个类DisplayMetrics中定义的全局变量,其实这个值就是当前手机的density/160,scaleDensity是用来px和sp之间的转化和scale差不多。还有一点就是这里转化都会有一个偏移值处理

dp这个单位可能对web开发的人比较陌生,因为一般都是使用px(像素)

但是,现在在开始android应用和游戏后,基本上都转换成用dp作用为单位了,因为可以支持多种分辨率的手机.

本文来源:http://www.bbyears.com/luyouqishezhi/88755.html

热门标签

更多>>

本类排行