4

我需要在我的活动中将与密度无关的像素转换为像素。我尝试在我的 onCreate 中使用此方法

float pix = dipValue * getResources().getDisplayMetrics().density;
pixel = Math.round(pix);

我尝试了另一种方法

Resources r = getResources();
float pix = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 35,r.getDisplayMetrics());
value = Math.round(pix);

两者都产生相同的价值。我认为问题不在于方法,而在于资源。我是否应该在清单文件中进行任何更改,例如

<supports-screens android:resizeable=["true"| "false"]
              android:smallScreens=["true" | "false"]
              android:normalScreens=["true" | "false"]
              android:largeScreens=["true" | "false"]
              android:xlargeScreens=["true" | "false"]
              android:anyDensity=["true" | "false"]
              android:requiresSmallestWidthDp="integer"
              android:compatibleWidthLimitDp="integer"
              android:largestWidthLimitDp="integer"/>

有一个与我类似的问题。但这并不能解决我的问题。帮帮我。

4

2 回答 2

5

你有没有尝试过

px = dp * (dpi / 160)

与密度无关的像素相当于 160 dpi 屏幕上的一个物理像素,这是系统为“中等”密度屏幕假定的基线密度。在运行时,系统会根据使用中屏幕的实际密度,根据需要透明地处理 dp 单位的任何缩放。dp 单位到屏幕像素的转换很简单:px = dp * (dpi / 160)。例如,在 240 dpi 的屏幕上,1 dp 等于 1.5 个物理像素。在定义应用程序的 UI 时,您应该始终使用 dp 单位,以确保您的 UI 在不同密度的屏幕上正确显示。

请检查此链接以获取更多详细信息。

于 2012-05-09T08:12:35.997 回答
4

您可以在 dimen.xml 中添加 dp 值并使用

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

这更容易...

于 2014-07-09T11:22:18.590 回答