将Pixel值转换为mm - Android

Raj*_*tel 4 android pixel

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

我应该使用任何具体方法吗?我可以找到将"mm"转换为"像素"的答案,但无法找到任何关于转换的内容,反之亦然.

Nim*_*ary 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;
    }
Run Code Online (Sandbox Code Playgroud)

所以你可以试试

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

MM = pix/metrics.xdpi*25.4f;


Jel*_*sen 5

我要说的是一个更可靠的方法(它随着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);
}
Run Code Online (Sandbox Code Playgroud)