Me encontré con un problema mientras codificaba en Kotlin. Copié y pegué una muestra de código Java que convierte DP en píxeles, para colocarlo como un parámetro para configurar el relleno programáticamente. Esperaba que el IDE lo transformara todo automáticamente a Kotlin, sin embargo, falló en el proceso.
El código en Java tiene el siguiente aspecto:
float scale = getResources().getDisplayMetrics().density; int dpAsPixels = (int) (sizeInDp*scale + 0.5f);Después de la traducción a Kotlin :
val scale = resources.displayMetrics.density val dpAsPixels = (sizeInDp * scale + 0.5f) as Int El cast as Int está marcado con el error.
"Este elenco nunca puede tener éxito"
¿Cómo se puede arreglar esto?
¿Por qué no intentarlo con una función de extensión como
val Int.dp: Int get() = (this / getSystem().displayMetrics.density).toInt()para convertir a DP y
val Int.px: Int get() = (this * getSystem().displayMetrics.density).toInt()convertir a píxeles?
Espero eso ayude :)
El error se puede resolver eliminando el molde as Int y reemplazándolo con el método .toInt()
val scale = resources.displayMetrics.density val dpAsPixels = (16.0f * scale + 0.5f).toInt()Si tiene valor en dimens.xml
<dimen name="textSize">24dp</dimen>Luego, puede obtener valor en píxeles como Int
val value = resources.getDimensionPixelSize(R.dimen.textSize)