1

我可以使用getWindowManager().getDefaultDisplay(). 现在我想知道如何dp从我得到的像素值中获取价值。例如,假设我使用以下代码获得了屏幕的宽度:

Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();

现在width我得到的是像素,我如何将其转换为dp.

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

4

4 回答 4

2

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

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

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

于 2012-04-26T11:09:09.657 回答
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 个像素。

于 2012-05-12T11:34:47.300 回答
1

您需要使用屏幕的像素密度在实际像素和 dp 之间进行转换。这在此处的 Android 开发人员门户/指南中进行了描述。看一看

于 2012-04-26T11:12:50.697 回答
0

最短的方法是使用 TypedValue。

  public static float pxToDp(Context context, float pixel) {
            return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, pixel, context.getResources().getDisplayMetrics());
  }
于 2017-12-02T06:54:20.703 回答