7

由于特定需要,在我的android布局中,我使用了“mm”来提供尺寸。在 TextView 中,我也提供了以“mm”为单位的尺寸。当我这样做textView.getTextSize()时,返回的大小始终是像素值。我想将该像素值转换为“mm”。例如,如果我将字体大小设置为“2mm”,那么在任何设备上,当我这样做时getTextSize(),我想获得“2mm”。

我应该为此使用任何特定方法吗?我可以找到将“mm”转换为“pixel”的答案,但找不到任何关于转换反之亦然的信息。

4

5 回答 5

11

我们使用TypedValue.java

float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, 1, 
                getResources().getDisplayMetrics());

  public static float applyDimension(int unit, float value,
                                       DisplayMetrics metrics)
    {
        switch (unit) {
        case COMPLEX_UNIT_PX:
            return value;
        case COMPLEX_UNIT_DIP:
            return value * metrics.density;
        case COMPLEX_UNIT_SP:
            return value * metrics.scaledDensity;
        case COMPLEX_UNIT_PT:
            return value * metrics.xdpi * (1.0f/72);
        case COMPLEX_UNIT_IN:
            return value * metrics.xdpi;
        case COMPLEX_UNIT_MM:
            return value * metrics.xdpi * (1.0f/25.4f);
        }
        return 0;
    }

所以你可以试试

Pix = mm * metrics.xdpi * (1.0f/25.4f);

MM = pix / metrics.xdpi * 25.4f;

于 2013-01-28T20:04:29.657 回答
8

我想说一个更强大的方法(随着 Android 框架中应用的任何新见解而发展)是这样的:

public static float pxToMm(final float px, final Context context)
{
    final DisplayMetrics dm = context.getResources().getDisplayMetrics();
    return px / TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, 1, dm);
}
于 2015-01-22T11:07:18.317 回答
0

尝试查看此链接。您正在寻找屏幕像素密度。

在android中以编程方式获取屏幕密度?

从这里您可以使用英寸到毫米的转换(1 英寸 == 25.4 毫米)来获得答案。

于 2013-01-28T19:52:44.323 回答
0

这是谷歌的另一个选择:http: //developer.android.com/reference/android/util/DisplayMetrics.html

您需要将此数字缩放为毫米,因此请使用 25.4 毫米 = 1 英寸。

于 2013-01-28T19:56:02.520 回答
-2
float mm = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 1, 
            getResources().getDisplayMetrics());

应用维度参数

于 2013-01-28T20:00:36.877 回答