繁体   English   中英

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

[英]Convert Dp to Px in Kotlin - This cast can never succeed

我在使用 Kotlin 编码时遇到了问题。 我复制粘贴了一个将 DP 转换为像素的Java 代码示例,以便将其作为以编程方式设置填充的参数。 我期待 IDE 自动将其全部转换为 Kotlin,但在这个过程中它失败了。

Java中的代码如下所示:

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

翻译成Kotlin后:

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

转换as Int标记有错误

“这个演员永远不会成功”

这怎么能解决?

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

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

转换为 DP 和

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

转换为像素?

希望能帮助到你 :)

可以通过将.toInt()删除as Int并用.toInt()方法替换它来解决该错误

val scale = resources.displayMetrics.density
val dpAsPixels = (16.0f * scale + 0.5f).toInt()

如果你在 dimens.xml 中有价值

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

然后,您可以将像素值作为 Int

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

扩展.kt 文件

val Int.dp: Int
    get() = (toFloat() * Resources.getSystem().displayMetrics.density + 0.5f).toInt()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM