如何将xml中的android:radius转换为Kotlin android中的浮点值
我有一个可绘制的背景xml文件,如下所示,其中我将视图的半径设置为40dp:如何将xml中的android:radius转换为Kotlin android中的浮点值,android,android-layout,kotlin,cornerradius,Android,Android Layout,Kotlin,Cornerradius,我有一个可绘制的背景xml文件,如下所示,其中我将视图的半径设置为40dp: <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/jungleGreen"/> <corners android
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid
android:color="@color/jungleGreen"/>
<corners
android:bottomLeftRadius="40dp"
android:topLeftRadius="40dp"/>
</shape>
基本上,我发现如果我将函数中的值设置为45f,那么xml文件中的值可能接近40dp
我的问题是,是否有任何规则可以将其转换为准确的数字?似乎到处都没有文档
任何帮助都将不胜感激
谢谢 以编程方式设置的任何值都将被视为像素。实际上,您应该将dp值转换为像素。你可以用这个方法
fun dpToPx(context: Context, dp: Float): Float {
return dp * (context.resources.displayMetrics.densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT)
}
像这样使用它
private fun setupGraphBackground(view: View) {
val gradientDrawable = GradientDrawable()
val rad = dpToPx(context, 40f)
gradientDrawable.shape = GradientDrawable.RECTANGLE
gradientDrawable.setColor(resources.getColor(R.color.jungleGreen))
gradientDrawable.setStroke(0, null)
gradientDrawable.cornerRadii = floatArrayOf(rad, rad, 0f, 0f, 0f, 0f, rad, rad)
view.background = gradientDrawable
}
您还可以创建一个
UIUtils
类,并将此方法添加到伴生对象中,这样您就可以从任何需要的地方调用它。谢谢您的回答,我只想澄清最后一件事:那么我们在cornerRadii中输入的数字是以像素为单位的?因为我看到你的解决方案是将xml中的dp转换成像素?干杯,@LongDao所以基本上你在cornerRadii中输入的任何值都将被视为一个像素。我将更新我的答案以了解如何使用此方法
private fun setupGraphBackground(view: View) {
val gradientDrawable = GradientDrawable()
val rad = dpToPx(context, 40f)
gradientDrawable.shape = GradientDrawable.RECTANGLE
gradientDrawable.setColor(resources.getColor(R.color.jungleGreen))
gradientDrawable.setStroke(0, null)
gradientDrawable.cornerRadii = floatArrayOf(rad, rad, 0f, 0f, 0f, 0f, rad, rad)
view.background = gradientDrawable
}