在Kotlin中将Dp转换为Px-这种转换永远无法成功

时间:2019-01-28 07:28:42

标签: java android android-studio kotlin

在Kotlin中编码时遇到问题。我复制粘贴了java code sample并将DP转换为Pixels,以便将其作为用于以编程方式设置填充的参数。我原以为IDE会自动将其全部转换为Kotlin,但是在此过程中失败了。

Java 中的代码如下:

float scale = getResources().getDisplayMetrics().density;
int dpAsPixels = (int) (sizeInDp*scale + 0.5f);

翻译成科特林后:

val scale = resources.displayMetrics.density
val dpAsPixels = (sizeInDp * scale + 0.5f) as Int 

演员表as Int被标记为错误

  

“此强制转换永远不会成功”

如何解决?

3 个答案:

答案 0 :(得分:2)

如果你在 dimens.xml 中有价值

<dimen name="textSize">24dp</dimen>

然后,您可以以像素为单位获取值作为 Int

val value = resources.getDimensionPixelSize(R.dimen.textSize)

答案 1 :(得分:1)

可以通过删除强制转换as Int并将其替换为方法.toInt()

来解决该错误。
val scale = resources.displayMetrics.density
val dpAsPixels = (16.0f * scale + 0.5f).toInt()

答案 2 :(得分:1)

为什么不尝试使用扩展功能,例如

val Int.dp: Int get() = (this / getSystem().displayMetrics.density).toInt()

val Int.px: Int get() = (this * getSystem().displayMetrics.density).toInt()

希望它会有所帮助;)