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

dar*_*rsh 4 android pixel density-independent-pixel

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

float pix = dipValue * getResources().getDisplayMetrics().density;
pixel = Math.round(pix);
Run Code Online (Sandbox Code Playgroud)

我尝试了另一种方法

Resources r = getResources();
float pix = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 35,r.getDisplayMetrics());
value = Math.round(pix);
Run Code Online (Sandbox Code Playgroud)

两者都产生相同的价值.我认为问题不在于方法,而在于资源.我应该在Manifest文件中进行任何更改吗?

<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"/>
Run Code Online (Sandbox Code Playgroud)

我的问题也有类似的问题.但它并没有解决我的问题.帮帮我.

sil*_*war 5

你有没有尝试过

px = dp * (dpi / 160)
Run Code Online (Sandbox Code Playgroud)

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

请查看此链接以获取更多详细信息.