将像素转换为dpi用于mdpi和hdpi屏幕

时间:2012-12-06 19:30:22

标签: java android dpi floating-accuracy

我正在使用我在另一个在mdpi屏幕上正常工作的线程上找到的代码:

public static float convertDpToPixel(float dp,Context context){
        Resources resources = context.getResources();
        DisplayMetrics metrics = resources.getDisplayMetrics();
        float px = dp * (metrics.densityDpi/160f);
        return px;
    }

public static float convertPixelsToDp(float px,Context context){
        Resources resources = context.getResources();
        DisplayMetrics metrics = resources.getDisplayMetrics();
        float dp = px / (metrics.densityDpi /160f);
        return dp;

    }

在hdpi屏幕上使用时,文本大小会在尝试增加文本大小时跳转。我假设它是因为它在分割densityDpi时使用的是硬编码的160f?有没有动态的方法来确定它是160dpi还是240dpi?

2 个答案:

答案 0 :(得分:2)

试试这个方法:

public float dpToPx(float dp, Context context) {
    float density = context.getResources().getDisplayMetrics().density;
    return dp * density;
}

答案 1 :(得分:1)

来自doc

metrics.density 

是您正在寻找的缩放系数。

  

这是密度独立像素单元的缩放系数,其中一个DIP是大约160 dpi屏幕上的一个像素(例如240x320,1.5“x2”屏幕),提供系统显示的基线。因此,在160dpi屏幕上,此密度值将为1;在120 dpi的屏幕上它将是.75;等