琴弦欲奏 2013-03-13 02:31 采纳率: 71.4%
浏览 3343

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条回答 默认 最新

  • Jobernowl 2013-03-14 02:14
    关注

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

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable