1

我的 Android 应用在 480x800 像素分辨率下看起来很棒,但它在 240x400 像素的 LDPI 屏幕上中断。我知道我可以在活动中获得屏幕的缩放因子,使用它会根据屏幕分辨率getResources().getDisplayMetrics().density给出确切的值。float

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

更新

另外,我lp.setMargins(100,200,0,0);用来设置边距,我将对其进行哪些修改以使用从设备收到的 DPI 因子?

PS我知道它更像是一个数学问题而不是编程,但我的数学很差,对不起。

4

1 回答 1

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

但是,使用方法使它看起来更加干净和可读。:-)

于 2012-06-24T12:01:38.407 回答