如何使用 DPI 缩放因子 (float) 设置边距 (int)
Posted
技术标签:
【中文标题】如何使用 DPI 缩放因子 (float) 设置边距 (int)【英文标题】:How to use DPI scaling factor (float) to set margins (int) 【发布时间】:2012-06-25 23:32:34 【问题描述】:我的 android 应用在 480x800 像素分辨率下看起来很棒,但在 240x400 像素的 LDPI 屏幕上会中断。我知道我可以使用getResources().getDisplayMetrics().density
获得活动中屏幕的缩放因子,这将根据屏幕分辨率给出确切的float
值。
在我的应用程序中,我在其中使用了RelativeLayout
和ImageView
s,并使用setMargins()
设置图像的边距,因为此方法使用int
中的像素作为其顶部、左侧、底部和右侧值,如何使用我得到的 DPI 因子设置这些值?(这是一个浮点数)。我们有Math.floor()
,但我使用像素将图像定位在非常特定的位置,并且方法返回的 DPI 因子在小数位具有非常具体的值,不能忽略,所以转换为int
对我不起作用.
更新
另外,我使用lp.setMargins(100,200,0,0);
设置边距,我将对其进行哪些修改以使用从设备收到的 DPI 因子?
附:我知道这更像是一个数学问题而不是编程,但我的数学很差,抱歉。
【问题讨论】:
【参考方案1】:看起来我问这个问题还为时过早,而不是摆弄自己,但我也注意到我根本不是第一个面对这个问题的人。
所以,这是我找到的解决方案。
我在我的 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);
然而,使用方法使它看起来更干净和可读。 :-)
【讨论】:
以上是关于如何使用 DPI 缩放因子 (float) 设置边距 (int)的主要内容,如果未能解决你的问题,请参考以下文章