android 在Kotlin中将Dp转换为Px-此施法永远不会成功

gijlo24d  于 2022-12-21  发布在  Android
关注(0)|答案(4)|浏览(190)

我在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标记有错误
"这个演员永远不会成功"
如何解决此问题?

wxclj1h5

wxclj1h51#

为什么不尝试使用扩展函数,例如

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

转换为DP和

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

转换为像素?
希望有帮助:)

ig9co6j1

ig9co6j12#

可以通过移除强制转换as Int并将其替换为方法.toInt()来解决此错误

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

gopyfrb33#

如果dimens.xml中有值

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

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

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

dgiusagp4#

扩展名.kt文件

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

相关问题