如何使用DPI缩放系数(浮动)来设置页边距(INT)(How to use DPI scaling

2019-09-18 10:42发布

我的Android应用着眼于480x800像素分辨率伟大的,但它在LDPI屏幕打破了240X400像素。 我知道我可以使用屏幕缩放因子活性getResources().getDisplayMetrics().density这将给出确切的float取决于屏幕分辨率值。

在我的应用程序中,我使用RelativeLayoutImageView内其S,并设置使用图像的边缘setMargins()这种方法是用像素int其顶部,左侧,底部和正确的价值观, 我怎么可以使用设置这些值DPI因素我? (这是一个浮动)。 我们有Math.floor()但我使用的像素在非常特定的位置定位图像,并通过方法返回DPI因子在小数位不能忽视的非常具体的值,所以铸造int不为我工作。

更新

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

PS我知道它更多的数学问题,而不是编程,但我穷的数学,对不起。

Answer 1:

貌似我是太早问这样的问题,而不是摆弄自己,但也注意到,我不是在所有的首先要面对这个问题。

所以,这里的解决方案,我发现。

我在我的活动类创建的下面的方法。

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

这将转换GIVEN 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);

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



文章来源: How to use DPI scaling factor (float) to set margins (int)