一直都在网上找到很多用代码(基本就是同一个)进行dp跟px之间转换的代码,最近因工作需要,而我贪图便利以及省略适配,我试着把那个代码做成了一个自己用的小工具,在手机上安装从px转换成dp,用工具转换一下设计图的px值,转换后直接设置在xml布局文件上,然而这个时候发现效果会跟设计图不一样,意味着转换出来的结果不对。我看了一下转出来的dp基本就比实际需要的小,例如100px转成dp,代码算出的是50dp.但是实际上要达到px设计图的布局效果,这个dp值要设置得更大一点大概是67dp左右
========================进一步环境分析===============================
我发现这个问题用的是小米2手机。研究过计算过,density什么的应该都是正确的,唯独转换计算出来的dp值不适合。距离参数,我的小米2分辨率是720*1280,dpi是341.5,density=2.1(直接系统获取的是2.0)这是如果用这些值去套入公式去算出来的dp值(举例:100px/2.0+0.5=50dp),效果会显得偏小.如果把density改成1.5(举例:100px/1.5+0.5=67dp),那么计算出来的结果就是跟设计图一样的效果了,这个是为什么呢?
以下是我使用的转换代码
float scale = context.getResources().getDisplayMetrics().density;
int dp=(int)px/scale+0.5f;