Android:将点转换为像素

Android:将点转换为像素,android,resolution,pixels,points,Android,Resolution,Pixels,Points,我一直在XML文件中使用pt单元。现在我需要在运行时设置元素的宽度。如何通过点设置宽度,使其与我在其他地方使用的单位相同。我想我需要乘以分辨率和dpi。代码示例最好。您可以使用dip而不是pt首先,您应该真正阅读Android开发者文档中的以下深入文章: 在中间,你会发现下面的标题: 不要在代码中使用硬编码像素值 // Convert the dps to pixels final float scale = getContext().getResources().getDisplayMetr

我一直在XML文件中使用
pt
单元。现在我需要在运行时设置元素的宽度。如何通过点设置宽度,使其与我在其他地方使用的单位相同。我想我需要乘以分辨率和dpi。代码示例最好。

您可以使用
dip
而不是
pt
首先,您应该真正阅读Android开发者文档中的以下深入文章:

在中间,你会发现下面的标题:

不要在代码中使用硬编码像素值

// Convert the dps to pixels
final float scale = getContext().getResources().getDisplayMetrics().density;
mGestureThreshold = (int) (GESTURE_THRESHOLD_DP * scale + 0.5f);

我使用pt而不是dip,因为它对非程序员更有意义。如果有人问这有多大,我可以说12分,他们可以知道这是什么。如果我说像素,那么他们可能没有意识到Android的像素比PC上的像素小得多,如果我说dips,那么他们将面临一个新单词。所有这些都放在一边。我可以在运行时使用dip吗?我能把pt转换成dip吗?关于运行时的dip问题。可以,但必须将像素与屏幕比例因子相乘,才能将像素转换为DPs,而屏幕比例因子可以通过context().getResources().getDisplayMetrics().density获得。为什么第二行中有“+0.5f”?该示例中的幻数,还是将像素正确转换为dp所需的幻数?当表达式转换为整数时,舍入为最接近的整数…因为否则可能会以0像素结束…:)如果您使用的是float,而不是强制转换为int,那么不需要添加0.5f。请参阅我关于将点转换为像素的文章?上面评论中链接的博客已移至