将dip转换为像素,产生相同的值

时间:2012-05-09 08:04:16

标签: android pixel density-independent-pixel

我需要将密度无关的像素转换为活动中的像素。 我试着在我的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"/>

我的类似question。但它并没有解决我的问题。帮助我。

2 个答案:

答案 0 :(得分:5)

你试过吗

px = dp * (dpi / 160)
  

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

请查看this link了解详情。

答案 1 :(得分:4)

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

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

这更容易......