前言:通常设置控件背景色、圆角、边框大小、边框颜色,是通过自定义shape文件做为背景设置给控件,虽然在布局文件里能直接看到效果,同时还能让背景支持selector标签的资源文件,但对于简单的设置每次都要创建shape文件也挺繁琐的,于是本文通过动态代码方式进行设置进行简化
分析:控件的背景样式其实是通过GradientDrawable来实现的,只要将GradientDrawable设置成自定义样式,然后将控件的背景设置为该GradientDrawable即可。
实现:
object ViewUtil {
fun initBackground(view: View, bgColor : Int, topLeftRadius: Int, topRightRadius : Int, bottomLeftRadius : Int,
bottomRightRadius : Int, strokeWidth : Int, strokeColor : Int){
val context = view.context
val gradientDrawable = GradientDrawable()
gradientDrawable.setColor(ContextCompat.getColor(context, bgColor))
if (topLeftRadius != 0 || topRightRadius != 0 || bottomLeftRadius != 0 || bottomLeftRadius != 0){
gradientDrawable.cornerRadii = floatArrayOf(topLeftRadius.toFloat(), topLeftRadius.toFloat(),
topRightRadius.toFloat(), topRightRadius.toFloat(), bottomLeftRadius.toFloat(),
bottomLeftRadius.toFloat(), bottomRightRadius.toFloat(), bottomRightRadius.toFloat())
}
gradientDrawable.setStroke(strokeWidth,ContextCompat.getColor(context, strokeColor))
view.background = gradientDrawable
}
}
//调用实例
ViewUtil.initBackground(myTv, R.color.colorPrimary, 10, 10, 10, 10, 2, R.color.colorAccent)