setWidth(int pixels)使用dip还是px?

setWidth(int pixels)是否使用与设备无关的像素或物理像素作为单位? 例如,setWidth(100)将视图的宽度设置为100倾斜或100像素?

谢谢。

它使用像素,但我相信你想知道如何使用骤降。 答案在TypedValue.applyDimension() 。 下面是一个如何在代码中将倾斜转换为px的示例:

 // Converts 14 dip into its equivalent px Resources r = getResources(); int px = Math.round(TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics())); 

在代码中获取固定数量的DIP的正确方法是创build一个包含dp值的资源XML文件,如下所示:

 <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="image_width">100dp</dimen> <dimen name="image_height">75dp</dimen> </resources> 

然后参考代码中的资源,如下所示:

 float width = getResources().getDimension(R.dimen.image_width)); float height = getResources().getDimension(R.dimen.image_height)); 

您返回的浮点数将相应地缩放设备的像素密度,因此您无需在整个应用程序中继续复制转换方法。

 float dps = 100; float pxs = dps * getResources().getDisplayMetrics().density; 

来源(@Romain Guy)

方法setWidth(100),设置为100像素为宽度(而不是在DP)。所以你可能会面对不同的Android手机的宽度变化的问题。所以使用测量在dp而不是像素。使用下面的代码来获得在样品宽度= 300px和高度= 400px。

 int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics()); int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics()); 

像素当然,该方法是要求像素作为参数。