如何以编程方式设置视图形状和背景颜色?
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]
}
- 有什么方法可以在可绘制的 xml 中 运行 函数吗?
- 有没有办法在不改变形状的情况下改变可绘制形状的背景颜色
您无法在 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
}
}
我必须创建一个圆形并随机绘制它,但我必须以编程方式进行。 它必须看起来像 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]
}
- 有什么方法可以在可绘制的 xml 中 运行 函数吗?
- 有没有办法在不改变形状的情况下改变可绘制形状的背景颜色
您无法在 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
}
}