如何以编程方式设置视图形状和背景颜色?

How to set a views shape and background color programatically?

我必须创建一个圆形并随机绘制它,但我必须以编程方式进行。 它必须看起来像 this

需要背景的TextView

val tvAuthorSubtext = TextView(context)
tvAuthorSubtext.apply {
   text = "AA"
   textSize = 10f
   setTextColor(ContextCompat.getColor(context, R.color.white))
   gravity = Gravity.CENTER
   typeface = ResourcesCompat.getFont(context, R.font.ubuntu)
   layoutParams = LinearLayout.LayoutParams(72, 72)
   setBackgroundResource(R.drawable.bg_author_shape)
   }

R.drawable.bg_author_shape

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
   <corners android:radius="12dp" />
   <solid android:color="@color/black" />
</shape>

getBackgroundRandomColor 函数

fun getRandomBackgroundColor() :Int {
  val colorArray : MutableList<Int> = mutableListOf()
  colorArray.add(R.color.aqua)
  colorArray.add(R.color.bright_blue)
  colorArray.add(R.color.bright_purple)
  colorArray.add(R.color.bright_pink)
  colorArray.add(R.color.bright_green)
  colorArray.add(R.color.orangey_yellow)
  colorArray.add(R.color.tealish)

  val rnds = (0..(colorArray.size-1)).random()

  return colorArray[rnds]

}
  1. 有什么方法可以在可绘制的 xml 中 运行 函数吗?
  2. 有没有办法在不改变形状的情况下改变可绘制形状的背景颜色

您无法在 xml 中更改可绘制形状的背景颜色。 要动态更改形状的颜色,您必须创建自定义视图。

我想到了这两种方法:

方法一: 使用 Canvas 和 Paint 创建自定义视图。 这是一个有用的示例,说明如何以编程方式创建圆形并为其分配颜色。

Creating CustomView using Canvas And Paint

您还可以在使用 onDraw() 方法绘制形状时绘制文本。

方法二: 通过扩展 View 或其他 ViewGroup 类 创建自定义视图。 这是您应该如何操作的简单示例。

public class ColorOptionsView extends View {

private View mValue;
private ImageView mImage;

public ColorOptionsView(Context context, AttributeSet attrs) {
    super(context, attrs);

    TypedArray a = context.obtainStyledAttributes(attrs,
            R.styleable.Options, 0, 0);
    String titleText = a.getString(R.styleable.Options_titleText);
    int valueColor = a.getColor(R.styleable.Options_valueColor,
            android.R.color.holo_blue_light);
    a.recycle();

    // more stuff
}

}