android dp和sp的区别,Android中dp,px,sp的区分与理解【原创】

最近在做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作用为单位了,因为可以支持多种分辨率的手机.

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/14635.html

75d087ef9a9fb11dc373caaf33adbf7f.png

微信打赏

支付宝打赏

感谢您对作者Joy的打赏,我们会更加努力!    如果您想成为作者,请点我

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值