在Android Studio中,“dp”和“int”之间有什么关系?

3
我们都知道,TextView有一个属性"textSize",其单位从"dp"到"sp"不等。
但是有一天当我在搜索一个问题 "编程设置ImageView的宽度和高度" 时,我发现得票最高的答案写道:image_view.getLayoutParams().height = 20; 实际上,我想编程地将ImageView的高度设置为与TextView一样高,但是TextView的textSize为20dp,而ImageView的高度是一个整数20。
那么"dp"和"int"之间有什么关系?如何将一个转换成另一个?
1个回答

3
当您以编程方式设置视图的宽度时,它实际上采用像素作为整数值的高度。因此,当您设置 image_view.getLayoutParams().height = 20; 时,这意味着它采用了20像素。但是您也可以通过将dp转换为像素来设置宽度和高度。您可以通过以下方式进行转换。
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);

这里的dps是您实际使用的dp,可以将其转换为像素来设置宽度和高度。

很清楚!但我还有一个问题:为什么最后要加上“+0.5f”? - vainquit
这实际上是一个将dp转换为像素的公式。我可以说,+0.5f的目的是四舍五入到最近的像素。如需更多信息,请访问https://developer.android.com/training/multiscreen/screendensities。 - Tariqul Islam
嗯,对我来说有点复杂,也许我需要更多时间来理解它们,并在其他日子提出另一个问题。但是我确实找到了原始问题的答案,非常感谢! - vainquit

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