将dp转换为像素以支持多屏幕

时间:2016-07-09 17:19:53

标签: android screen dpi

我很难做到这一点。

基本上我正在创建一个ImageView并将LayoutParameter应用于它。

LayoutParams lp = new LayoutParams(width, height);
lp.gravity = Gravity.CENTER;

我知道widthheight参数会接收像素数,因此我在DP中传递它们并使用以下方法将其转换为绝对像素:

public int convertToPixels(float dpSize){
    final float density = getResources().getDisplayMetrics().density;
    return ((int) (dpSize * density + 0.5f));
}

据我所知,这应该可以在不同的屏幕上绘制完全相同的区域,对吗?不幸的是,这根本不会发生。

我使用的这些方法有问题吗?

下面这两个仿真器具有相同的图像和相同的DP量。 左模拟器是1.0密度,右边一个是2.0。为什么它仍然看起来 太不同了 ?不要承担......

enter image description here

1 个答案:

答案 0 :(得分:1)

使用:

public class Convert {

public static float convertDpToPixel(float dp){
        DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
        float px = dp * (metrics.densityDpi / 160f);
        return Math.round(px);
        }

}

只需以静态方式使用它:

float requiredPixel = Convert.convertDpToPixel(16.0);

了解更多信息:https://developer.android.com/guide/practices/screens_support.html