2010-03-09 66 views

回答

201

它使用像素,但我相信你想知道如何使用骤降代替。答案在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())); 
+58

你也可以调用nbDips * getResources()。getDisplayMetrics()。density – 2010-03-09 05:08:41

+9

实际上,这正是TypedValue.applyDimension()所做的。我考虑过发布该内容,但我喜欢浏览API以防万一发生任何变化......但我认为如果您给予它可以使用该方法是安全的。 :) – 2010-03-09 05:15:34

+11

applyDimension()版本执行更多的代码,我发现它更难以阅读。 FWIW,我发布的这一行是我们在框架和标准应用程序中实际使用的地方。 – 2010-03-09 05:25:02

0

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

+1

如果是在布局XML文件中,我们可以指定的android:layout_width = “100dip” 或Android:layout_width = “100px的”。在源代码中,我们无法将布局的宽度指定为100dip? – user256239 2010-03-09 05:05:12

+0

不是直接的,你必须使用DisplayMetrics.density来转换自己。 – 2010-03-09 05:10:25

23

获得代码的倾角的固定数量的正确方法是创建一个包含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)); 

你已经返回将被用于该设备的像素密度要相应地调整,所以你并不需要保持replicat浮子在整个应用程序中使用转换方法。

+0

在我的情况下,这个解决方案在我有一个自定义对话框的情况下效果最好,该对话框有一个列表视图,并且希望将ListView中的标题标签和列的宽度设置为相同的宽度。 – 2013-06-07 11:02:51

+0

你的第一句话有点儿有趣,你基本上说创建一个XML文件是*“在代码中指定[某事]”的正确方法*。那么我认为你只是使用代码中的常量没有指定它:) – Joffrey 2014-06-19 08:35:21

+0

@Joffrey是的我明白你的意思,所以我已经略微更新了措辞 – SDJMcHattie 2014-07-10 14:37:12

3

方法setWidth(100),将宽度设置为100 px(不在dp中)。因此,在不同的android手机上可能会遇到宽度不定的问题。因此,在dp中使用测量而不是像素。使用下面的代码获取测量值示例宽度的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());