摩客怎么设置安卓的dp_Android中的dp

在Android开发中,我们在描述View的宽、高时通常使用dp,但是设计在UI中进行标注时,却使用的是px。所以很多时候就导致UI和实际效果不一致。史记开发中,给设计和开发人员带来了很多困扰。

dp是什么?

那么Android为什么要引入dp,直接用px不可以吗?

dp和px又是什么关系?实际开发中该怎么转换?

在回答上面的问题之前,我们需要了解Android上一些基本概念:

英寸:指实际物理计量单位,手机对角线的大小。一般描述,手机的大小都是用的英寸,比如:红米4x就刚好是5英寸

分辨率:屏幕上垂直方向和水平方向上的像素个数,相同大小的手机,分辨率越高,屏幕的清晰度也越高。

像素密度:每英寸的像素点个数,同样的,像素密度越高,手机的清晰度也越高。像素密度=√{(长度像素数2+宽度像素数2)}/ 屏幕尺寸。

dp是什么?

dp是Android中的计量单位,主要是是用来标注控件的宽、高。它是一种基于像素密度的抽象单位,在每英寸160点的显示器上1dp=1px。

Android为什么要引入dp,为什么不可以直接用px?

由于,不同的手机使用的屏幕像素密度(每英寸屏幕上拥有的像素点)不一致,如果都使用px进行计量,就会导致同一个控件在不同的手机上,所表现出来的差异极大。

ab2279374ebf

image

可以看到,如果不用dp进行转换,同样一个布局,在不同的手机上差异巨大,甚至有可能导致布局错乱,这样对普通用户的使用体验极差。而使用dp就基本不会出现这 种情况,因为Android系统已经帮我们进行了适配。

dp和px的关系,以及实际开发中该怎么转换?

先看一个公式:px=dp * (dpi/160),这里的dpi就是我们上面提到的像素密度,至于为什么是除以160,可以查看知乎上的问题为什么 px=dp*(dpi/160),看到这里,我们就明白为什么每英寸160个像素点的时候1dp=1px了。在实际开发中我们不需要这么计算,因为(dpi/160)这一步Android系统已经帮我们计算好了,所以我们可以通过以下的方式对px和dp进行转换:

/**

* dp转换px

*/

private fun dp2px(context: Context, dpValue: Float): Float {

return context.resources.displayMetrics.density * dpValue

}

/**

* px转换dp

*/

private fun px2dp(context: Context, pxValue: Float): Float {

return pxValue / context.resources.displayMetrics.density

}

补充:

像素密度和屏幕的关系:

QVGA(240*320) density=120

WQVGA(240*400) density=120

HVGA(320*480) density=160

WVGA(480*800) density=240

WXGA(1280*720) density=320

WUXGA(1920*1200)density=480

QXGA(2018*1536) density=640

不同像素密度对应的drawable文件夹

drawable-ldpi: 屏幕密度为120的手机设备

drawable-mdpi: 屏幕密度为160的手机设备

drawable-hdpi: 屏幕密度为240的手机设备

drawable-xhdpi: 屏幕密度为320的手机设备

drawable-xxhdpi:屏幕密度为480的手机设备

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值