在 Kotlin 中将 Dp 转换为 Px - 此转换永远不会成功
Posted
技术标签:
【中文标题】在 Kotlin 中将 Dp 转换为 Px - 此转换永远不会成功【英文标题】:Convert Dp to Px in Kotlin - This cast can never succeed 【发布时间】:2019-06-21 04:17:43 【问题描述】:我在使用 Kotlin 编码时遇到了问题。我复制粘贴了将 DP 转换为像素的java code sample,以便将其作为以编程方式设置填充的参数。我期待 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
标有错误
“这个演员永远不会成功”
如何解决这个问题?
【问题讨论】:
【参考方案1】:为什么不尝试使用扩展功能,例如
val Int.dp: Int get() = (this / getSystem().displayMetrics.density).toInt()
转换为 DP 和
val Int.px: Int get() = (this * getSystem().displayMetrics.density).toInt()
转换为像素?
希望对你有帮助:)
【讨论】:
这是最简单的方法。其他的已弃用。【参考方案2】:如果你在dimens.xml中有值
<dimen name="textSize">24dp</dimen>
然后,您可以将像素值作为 Int
val value = resources.getDimensionPixelSize(R.dimen.textSize)
【讨论】:
【参考方案3】:可以通过删除演员as Int
来解决错误,而是用方法.toInt()
替换它
val scale = resources.displayMetrics.density
val dpAsPixels = (16.0f * scale + 0.5f).toInt()
【讨论】:
以上是关于在 Kotlin 中将 Dp 转换为 Px - 此转换永远不会成功的主要内容,如果未能解决你的问题,请参考以下文章
如何在 kotlin 中将纪元时间戳转换为 unix 十六进制时间戳?
如何在 Xamarin 表单中将边距、填充、宽度和高度值转换为像素(px)?