2 a1388463837 a1388463837 于 2013.03.13 10:31 提问

Android为什么px2dp转换出来显示的效果不对?

一直都在网上找到很多用代码(基本就是同一个)进行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;

1个回答

sasuke38
sasuke38   2013.03.14 10:14

你是看美工的设计图上标注的是px 然后再换算成dp写到xml中么 这个肯定是只能适应一种分辨率的

为什么我要这么问你 这是因为带代码中设置一些大小 长宽单位都是像素 有些特殊的比如字体大小才可以指定单位

所以一般我的xml布局只有固定大小的控件才会写上 多少多少dp 但是多数情况下我是不写的 因为我很少遇到固定大小的东西

a1388463837
a1388463837 现在我不能理解的地方就在于,为什么在同一个手机算出来的dp值,设置上去的效果都不对
4 年多之前 回复
a1388463837
a1388463837 只能适应一种分辨率我了解,但是问题是,我就同一部手机,算出来的dp写到xml上显示的效果都对不上美工设计图的效果。总不能是我手机计算的时候分辨率跟应用的时候不同吧?
4 年多之前 回复
suannai0314
suannai0314 自己评论自己回答?其实可以用编辑的。
4 年多之前 回复
sasuke38
sasuke38 这个多少多少dp 是我随便写上去的 因为美工给我的是px 于是我根据手头上的手机算出dp设上去发现在别的手机有变化 所以最终我随便写上一个数值了
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片