【问题标题】:How to use DPI scaling factor (float) to set margins (int)如何使用 DPI 缩放因子 (float) 设置边距 (int)
【发布时间】:2012-06-25 23:32:34
【问题描述】:

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

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

更新

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

附:我知道这更像是一个数学问题而不是编程,但我的数学很差,抱歉。

【问题讨论】:

    标签: android compatibility resolution fragmentation


    【解决方案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);
    

    然而,使用方法使它看起来更干净和可读。 :-)

    【讨论】:

      猜你喜欢
      • 2020-10-11
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多