我有一个如下所示的可绘制背景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>
由于一些特定的原因,我需要在Kotlin Android中以编程方式执行相同的操作。因此,我编写了如下函数:
private fun setupGraphBackground(view: View) {
val gradientDrawable = GradientDrawable()
gradientDrawable.shape = GradientDrawable.RECTANGLE
gradientDrawable.setColor(resources.getColor(R.color.jungleGreen))
gradientDrawable.setStroke(0, null)
gradientDrawable.cornerRadii = floatArrayOf(45f, 45f, 0f, 0f, 0f, 0f, 45f, 45f)
view.background = gradientDrawable
}
基本上,我发现如果将函数中的值设置为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
类,并将此方法添加到随播对象中,以便可以在任何需要的地方调用它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句