我需要将密度无关的像素转换为活动中的像素。 我试着在我的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。但它并没有解决我的问题。帮助我。
答案 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);
这更容易......