如何使用DPI缩放因子(float)设置边距(int)

时间:2012-06-24 11:20:10

标签: android compatibility resolution fragmentation

我的Android应用程序在480x800像素分辨率下看起来很棒但在LDPI屏幕上以240x400像素打破。我知道我可以使用getResources().getDisplayMetrics().density获取活动中屏幕的缩放系数,这会根据屏幕分辨率提供精确的float值。

在我的应用中,我在其中使用了RelativeLayoutImageView,并使用setMargins()设置图像的边距,因为此方法使用int中的像素它的顶部,左侧,底部和右侧值,如何使用我得到的DPI因子设置这些值?(这是一个浮点数)。我们有Math.floor()但是我使用像素将图像定位在非常特定的位置,并且方法返回的DPI因子在小数位上具有非常特定的值,这是不可忽略的,因此转换为int不会为我工作。

更新

另外,我使用lp.setMargins(100,200,0,0);来设置边距,我将使用DPI因子从设备中获得哪些修改?

P.S。我知道这更像是一个数学问题,而不是编程,但我很擅长数学,对不起。

1 个答案:

答案 0 :(得分:8)

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

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

我在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);

然而,使用方法使其看起来更清晰和可读。 : - )