2012-06-24 61 views
1

我的Android应用程序在480x800像素分辨率下看起来不错,但它在LDPI屏幕上的分辨率为240x400像素。我知道我可以通过使用getResources().getDisplayMetrics().density来获得活动屏幕的缩放比例,这将根据屏幕分辨率给出确切的float值。如何使用DPI缩放因子(浮点)设置边距(int)

在我的应用程序,我已经使用RelativeLayoutImageView秒钟内它,并设置使用setMargins()图像的边缘,这种方法是用像素int其顶部,左侧,底部和正确的价值观,我该怎么设置这些使用DPI因子的值是多少?(这是一个浮点数)。我们有Math.floor(),但我使用像素在非常特定的位置定位图像,并且方法返回的DPI因子具有非常具体的小数位值,不能忽略,因此投射到int不适用于我。

更新

还有,我用lp.setMargins(100,200,0,0);来设置页边距,我会在里面做什么修改使用我从设备收到DPI因素?

P.S.我知道它更像一个数学问题,而不是编程,但我对数学很穷,抱歉。

回答

7

看起来我现在过早地提出这个问题而不是摆弄自己,但也注意到我并不是第一个面对这个问题的人。

所以,这里是我找到的解决方案。

我在我的Activity类中创建了以下方法。

private int px(float dips) 
{ 
    float DP = getResources().getDisplayMetrics().density; 
    return Math.round(dips * DP); 
} 

这将转化给dp值转换成相应的像素。您可以使方法中使用的变量DP为全局变量,并在onCreate()方法中将其初始化,而不是在px()中,以使方法快速执行。

用法:

lp.setMargins(px(100),px(200), 0, 0); 

,或者如果你没有创建px()只是这一点,并有DP全球。

lp.setMargins(100 * Math.round(DP), 200 * Math.round(DP), 0, 0); 

但是,使用方法使它看起来更清洁和可读。 :-)