【问题标题】:Convert Dp to Px in Kotlin - This cast can never succeed在 Kotlin 中将 Dp 转换为 Px - 此转换永远不会成功
【发布时间】: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 标有错误

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

如何解决这个问题?

【问题讨论】:

    标签: java android kotlin


    【解决方案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()
      

      【讨论】:

        猜你喜欢
        • 2017-04-10
        • 1970-01-01
        • 2011-10-03
        • 2017-07-29
        • 1970-01-01
        • 2015-06-22
        • 2023-02-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多