从Java代码指定DIP中的维度的正确方法是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我发现可以使用DIP在XML布局中设置我的界面元素的尺寸,如下面的片段所示:

android:layout_width="10dip"

但是所有的Java接口都将整数作为参数,并且没有办法在DIP中指定维度。计算此值的正确方法是什么?

我想我必须使用DisplayMetrics类的财产密度,但这是一种正确的方式吗?

我可以依靠这个公式总是正确的吗?

像素* DisplayMetrics.density = dip

在Android的某个地方是否有一个实用功能?

提问于
用户回答回答于

那是正确的公式。虽然DisplayMetrics.density不是一个静态成员,但根据您提到的同一个文档,正确的用法是:

// Maybe store this in a static field?
final float SCALE = getContext().getResources().getDisplayMetrics().density;

// Convert dips to pixels
float valueDips = 16.0f;
int valuePixels = (int)(valueDips * SCALE + 0.5f); // 0.5f for rounding
用户回答回答于

有一个现有的实用程序方法构建TypedValue.applyDimensions(int, float, DisplayMetrics),这是做到这一点。

以下是如何使用它:

// returns the number of pixels for 123.4dip
int value = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
                     (float) 123.4, getResources().getDisplayMetrics());

还有其他类型,你可以用它包括使用的名单COMPLEX_UNIT_SPCOMPLEX_UNIT_PT都在我上面链接的页面找到。如果排除(int)类型转换,您将获得浮点数。

我遇到了同样的问题,并通过查看代码来发现此问题。

扫码关注云+社区