从 Java 代码中指定 DIP 尺寸的正确方法是什么?
我发现可以使用 DIP 在 XML 布局中设置界面元素的尺寸,如以下片段所示:
android:layout_width="10dip"
但是所有 Java 接口都采用整数作为参数,并且无法在 DIP 中指定尺寸。计算这个的正确方法是什么?
我认为我必须使用 DisplayMetrics 类的属性密度,但这是正确的方法吗?
我可以相信这个公式总是正确的吗?
像素 * DisplayMetrics.密度 = 倾角
Android 中是否有用于转换的实用函数?
I found that it is possible to set dimensions of my interface elements in XML layouts using DIPs as in following fragment:
android:layout_width="10dip"
But all Java interface takes integer as arguments and there is no way to specify dimensions in DIPs. What is the correct way to calculate this?
I figured that I have to use property density of DisplayMetrics
class but is this a correct way?
May I rely on this formula being always correct?
pixels * DisplayMetrics.density = dip
Is there a utility function for the conversion somewhere in Android?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
有一个名为
TypedValue.applyDimensions(int, float, DisplayMetrics)
就是这样做的。使用方法如下:
您可以使用它的其他类型列表,包括
COMPLEX_UNIT_SP
、COMPLEX_UNIT_PT
,所有这些都可以在我上面链接的页面中找到。如果排除 (int) 类型转换,您将获得浮点数。我遇到了同样的问题,通过研究代码发现了这个问题。
There is an existing utility method built called
TypedValue.applyDimensions(int, float, DisplayMetrics)
that does this.Here's how to use it:
There's a list of other types that you can use with it including
COMPLEX_UNIT_SP
,COMPLEX_UNIT_PT
all found in the page I linked above. If you exclude the (int) typecast, you'll get the floating point number.I encountered the same problem and found this through poking around the code.
这是正确的公式。虽然
DisplayMetrics.densis
不是静态成员,因此,根据 您提到的同一文档,正确的用法是:That is the correct formula there. Although
DisplayMetrics.density
is not a static member, so, according to the same document you alluded to, correct usage is:使用显示指标密度字段,您可以获得一个比例因子来转换为下降或从下降转换。使用 Math.round 方法从 float 转换为 int,无需强制转换或添加 0.5
Using the display metrics density field, you can get a scaling factor to convert to/from dips. Use the Math.round method to convert from a float to an int without needing a cast or adding 0.5
我认为最好的方法是不要在代码中定义任何维度,而是使用
values/dimens.xml
文件。您始终可以使用所需的单位定义尺寸,例如:然后在您的活动中引用它,例如:
在进行必要的转换后,这将返回像素。当然,您也可以在其他 XML 中引用此内容,例如:
I think the best way is not to define any dimensions in code, but use the
values/dimens.xml
file instead. You can always define your dimension in the desired unit like:and then refer to this in your Activity like:
This would return pixels after doing the necessary conversions. And also of course you can refer to this in your other XMLs like: