安卓:将点转换为像素

7

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


请查看我的帖子,了解如何将点转换为像素:http://systemdotrun.blogspot.co.uk/2014/09/whats-point-in-font-sizing.html? - Dori
1
上面评论中链接的博客已经移动到 https://doridori.github.io/Whats-the-Point-(in-fonts-sizing)。 - digawp
2个回答

11

首先,你应该真正阅读一下来自Android开发者文档的深入文章:

http://developer.android.com/guide/practices/screens_support.html

在中间位置的标题下面,你会发现以下内容:

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

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

1
第二行为什么要加上“+ 0.5f”?这是一个魔数还是必须的,以正确地将像素转换为dp? - C0deAttack
4
将表达式转换为整数时,四舍五入到最接近的整数。 - Blrfl
否则你可能最终会得到0像素... :) - Zordid
如果你使用的是浮点数而不是强制转换为整数,那么添加0.5f是不必要的。 - ThomasW

1
你可以使用“dip”代替“pt”。

1
我使用pt而不是dip,因为这对于非程序员来说更有意义。如果有人问这有多大,我可以说12个点,他们就能知道那是多少了。如果我说像素,那么他们可能不会意识到Android像素比PC上的像素要小得多,如果我说dips,则他们将面临一个新词。撇开这一切,我能在运行时使用dip吗?我可以将pt转换为dip吗? - 700 Software
关于您在运行时的dip问题。是的,您可以这样做,但您必须通过将像素乘以屏幕比例因子来将像素转换为DP,您可以使用context().getResources().getDisplayMetrics().density获取该比例因子。 - C0deAttack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接