android中px和dp之间的不一致

时间:2014-12-15 20:23:56

标签: java android

好的,所以这里有一个摇摆不定的......在问我的问题之前,我会指出我已经读过这个: What is the difference between "px", "dp", "dip" and "sp" on Android? 所以这是我的问题,我在屏幕上有一些正方形(EditText),我使用dp单位在我的XML中定义,并将它们标识为square1,square2等,并且它们位于FrameLayout中(因为绝对布局已弃用且我不赞成看不到任何符合我目的的布局; 我想通过编程来控制屏幕上方块的位置,所以我使用

square1.setX(cc1x); 
square1.setY(cc1y);
square2.setX(cc2x); 
square2.setY(cc2y);

依此类推,其中cc1x,cc1y,cc2x,cc2y是根据应用程序逻辑而变化的int变量。问题是java语法不允许在变量的整数值中添加单位,所以在某些屏幕上我的应用程序运行得非常完美,但在密度不同的屏幕上,一切都要么太远,要么重叠。 ..

最后问题: 有没有办法“强制”单位进入setX / setY语句?

有没有办法获得我的应用程序运行设备的屏幕密度? (在这种情况下,我可以相应地重新计算X / Y坐标) (我还没有对第二种可能性进行研究,因为我在写这篇文章的过程中只是想到了它,所以如果它与其他问题重复,请接受我的道歉)。 提前感谢您的想法。

2 个答案:

答案 0 :(得分:0)

您可以添加此方法,以便在屏幕上的DP和设备的PX之间轻松转换

 public static float convertDpToPx(Context context, int dp) {
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
}

答案 1 :(得分:0)

我想更新这个帖子,因为我找到了一个更好的解决问题的方法,虽然你们(和女孩们)的答案确实教会了我很多,为此我表示感谢。最后,njzk2的回答让我重新考虑了我想要做的事情的整个方法。因此,不是移动我的盒子,这导致尺寸问题,现在我只是移动盒子的内容,使盒子很好地定位到位,这是更容易。无论如何,我希望这会对像我这样的其他初学者有用。