Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将xml中的android:radius转换为Kotlin android中的浮点值_Android_Android Layout_Kotlin_Cornerradius - Fatal编程技术网

如何将xml中的android:radius转换为Kotlin android中的浮点值

如何将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文件,如下所示,其中我将视图的半径设置为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: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
}