0

我正在使用我在另一个线程上找到的在 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 屏幕上使用它时,尝试增加文本大小时,文本大小会跳跃。我假设它是因为它在划分密度Dpi时使用硬编码的160f?有没有动态的方法来判断是160dpi还是240dpi?

4

2 回答 2

2

试试这个方法:

public float dpToPx(float dp, Context context) {
    float density = context.getResources().getDisplayMetrics().density;
    return dp * density;
}
于 2012-12-06T23:11:39.017 回答
1

文档

metrics.density 

是您正在寻找的比例因子。

这是密度无关像素单元的比例因子,其中一个 DIP 是大约 160 dpi 屏幕(例如 240x320、1.5"x2" 屏幕)上的一个像素,提供系统显示的基线。因此,在 160dpi 屏幕上,此密度值为 1;在 120 dpi 屏幕上为 0.75;等等

于 2012-12-06T19:50:20.300 回答