I ran into a problem while coding in Kotlin. I copy-pasted a java code sample that converts DP to Pixels, in order to place it as a parameter for setting padding programatically. I was expecting the IDE to automatically transform it all to Kotlin, however it failed in the process.
The code in Java looks like the following:
float scale = getResources().getDisplayMetrics().density;
int dpAsPixels = (int) (sizeInDp*scale + 0.5f);
After the translation to Kotlin:
val scale = resources.displayMetrics.density
val dpAsPixels = (sizeInDp * scale + 0.5f) as Int
The cast as Int is marked with the error
"This cast can never succeed"
How can this be fixed?
Why not trying it with an Extension Function such as
val Int.dp: Int get() = (this / getSystem().displayMetrics.density).toInt()
to convert to DP and
val Int.px: Int get() = (this * getSystem().displayMetrics.density).toInt()
to convert to Pixels?
Hope it helps :)
The error can be solved by removing the cast as Int and instead replace it with the method .toInt()
val scale = resources.displayMetrics.density
val dpAsPixels = (16.0f * scale + 0.5f).toInt()
If you have value in dimens.xml
<dimen name="textSize">24dp</dimen>
Then, you can get value in pixel as Int
val value = resources.getDimensionPixelSize(R.dimen.textSize)