【问题标题】:Create shape background programmatically for older APIs以编程方式为旧 API 创建形状背景
【发布时间】:2023-03-24 07:42:01
【问题描述】:

我创建了一个形状背景,但 setColor 函数不支持旧 API(比 Android Lollipop 更早,即 Kitkat、ICS)。有没有其他方法可以实现这一点。

这是我当前的代码:

val shape = GradientDrawable()
            shape.shape = GradientDrawable.OVAL
            shape.setStroke(strokeWidth!!,strokeColor!!)
            shape.setColor(selectedColor!!)
            p0.imageView.background = shape

【问题讨论】:

  • 旧 API 的意思,你能说得更具体点吗?
  • @KishoreJethava 比 LOLLYPOP 更早,即 Kitkat,ICS
  • 发布更多代码,例如变量 strokeColor 和可绘制的 XML 文件
  • strokeColor 只是一个变量
  • 究竟什么是不支持的? GradientDrawable 没有任何 API 级别的限制。

标签: android layout background shapes


【解决方案1】:

GradientDrawable有两个setColor方法

首先,在 API 级别 1 中添加

public void setColor (int argb)

第二,在 API 级别 21 中添加

public void setColor(ColorStateList colorStateList)

解决方案!!

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    shape.setColor(ContextCompat.getColor(this,R.color.colorAccent)) // your selectedColor
  }else {
    shape.setColor(Color.parseColor("#D81B60")) // your selectedColor
  }

【讨论】:

    【解决方案2】:

    @Kishore 感谢您的回复,但遗憾的是它没有奏效。所以我尝试使用 shapeDrawable 和 booyah!

                val oval = ShapeDrawable(OvalShape())
                oval.paint.color = selectedColor!!
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    p0.imageView.background = oval
                }
    

    【讨论】:

      猜你喜欢
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      相关资源
      最近更新 更多