我的Android应用程序在480x800像素分辨率下看起来很棒但在LDPI屏幕上以240x400像素打破。我知道我可以使用getResources().getDisplayMetrics().density
获取活动中屏幕的缩放系数,这会根据屏幕分辨率提供精确的float
值。
在我的应用中,我在其中使用了RelativeLayout
和ImageView
,并使用setMargins()
设置图像的边距,因为此方法使用int
中的像素它的顶部,左侧,底部和右侧值,如何使用我得到的DPI因子设置这些值?(这是一个浮点数)。我们有Math.floor()
但是我使用像素将图像定位在非常特定的位置,并且方法返回的DPI因子在小数位上具有非常特定的值,这是不可忽略的,因此转换为int
不会为我工作。
更新
另外,我使用lp.setMargins(100,200,0,0);
来设置边距,我将使用DPI因子从设备中获得哪些修改?
P.S。我知道这更像是一个数学问题,而不是编程,但我很擅长数学,对不起。
答案 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);
然而,使用方法使其看起来更清晰和可读。 : - )