“TypedValue.COMPLEX_UNIT_DIP”和“dp in xml”之间有什么区别吗?

时间:2014-02-15 06:50:53

标签: android android-layout

在我的App中,我使用

动态指定几个元素的宽度
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, mycontext.getResources().getDisplayMetrics());

我还使用了一些其他元素,其宽度在dp术语的布局xml中指定。

然而,当我在三星Galaxy Grand上运行应用程序时,我发现动态指定的100次下降并不完全等于布局xml中指定的100 dp(略多)。

然而,当我在AVD上测试时,它看起来很好(两个宽度匹配)。

还有其他人遇到过这个问题吗? 任何的想法?

1 个答案:

答案 0 :(得分:1)

发现了这个问题。

我在做:

int pixels_unit_five = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, mycontext.getResources().getDisplayMetrics());

然后我将这个值用于不同宽度的视图,如:

android.widget.RelativeLayout.LayoutParams params_item = new RelativeLayout.LayoutParams(pixels_unit_five*20,pixels_unit_five*8 );

android.widget.RelativeLayout.LayoutParams params_item = new RelativeLayout.LayoutParams(pixels_unit_five*10,pixels_unit_five*8 );

等等..

倾角值正在转换为int,并且正在进行小的舍入以适合精确的像素值。这样,当乘以20时,会增加相当大的像素值差异。

通过直接获得精确的倾角值并使用它们来解决它。