如何以编程方式从android中的像素计算dp

时间:2011-11-28 12:44:16

标签: android android-layout resolution

我想以编程方式从dp计算px。怎么做? 我得到了解决方案:

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
ht = displaymetrics.heightPixels;
wt = displaymetrics.widthPixels;

4 个答案:

答案 0 :(得分:314)

此处的所有答案都显示 dp-> px 转换,而不是 px-> dp ,这是OP要求的。 请注意,TypedValue.applyDimension不能用于转换px-> dp,因为您必须使用此处描述的方法:https://stackoverflow.com/a/17880012/504611(为方便起见,请在下面引用)。

  

没有Context对象,优雅的静态方法:

public static int dpToPx(int dp) {
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}

public static int pxToDp(int px) {
    return (int) (px / Resources.getSystem().getDisplayMetrics().density);
}

答案 1 :(得分:53)

float ht_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, ht, getResources().getDisplayMetrics());
float wt_px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wt, getResources().getDisplayMetrics());

答案 2 :(得分:40)

这应该为您提供转换像素 - > DP:

DisplayMetrics displaymetrics = new DisplayMetrics();
int dp = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, myPixels, displaymetrics );

答案 3 :(得分:2)

DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        String str_ScreenSize = "The Android Screen is: "
                    + dm.widthPixels
                    + " x "
                    + dm.heightPixels;

        TextView mScreenSize = (TextView) findViewById(R.id.strScreenSize);
        mScreenSize.setText(str_ScreenSize);

你可以看看吗..

或者这也可以帮助你

int value = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
                     (float) 123.4, getResources().getDisplayMetrics());