将Pixel值转换为dp值

时间:2012-04-26 10:59:43

标签: android

实际上我可以使用getWindowManager()。getDefaultDisplay()找到屏幕宽度。现在我想知道如何从像素中得到的值得到dp的值。例如,假设我使用 -

得到屏幕的宽度

用于获取宽度的代码

Display display = getWindowManager().getDefaultDisplay();

int width= display.getWidth();

现在我得到的宽度是像素,我如何将其转换为dp。

请帮我解决这个问题。我已经在android文档中看到了,但是不知道如何实现它。

4 个答案:

答案 0 :(得分:2)

如果要将dp值转换为像素,可以使用以下公式:

DisplayMetrics metrics = getWindowManager().getDefaultDisplay().getMetrics(metrics);
float logicalDensity = metrics.density;
int px = (int) (dp * logicalDensity + 0.5);

要从像素获取dp,请将密度除以像素值而不是乘以。

答案 1 :(得分:2)

例如:在dimens.xml文件夹中创建新的res/values

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="dim_5dp">5dp</dimen>
</resources>

然后在你的活动中:

int pixels = getResources().getDimensionPixelSize(R.dimen.dim_5dp);

好处是getDimensionPixelSize()处理零大小,在这种情况下它返回至少1个像素。

答案 2 :(得分:1)

您需要使用屏幕的像素密度在实际像素和dp之间进行转换。这在Android developer portal/guide here中有所描述。看看

答案 3 :(得分:0)

最短的方法是使用TypedValue。

  public static float pxToDp(Context context, float pixel) {
            return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, pixel, context.getResources().getDisplayMetrics());
  }