可以更改背景颜色的自定义TextView

时间:2019-11-12 08:32:18

标签: android kotlin

我在kotlin中编写了一个自定义TextView,它用作选择按钮。 意思是,在未选择状态下,它的背景是带有角的灰色背景,在未选择状态下,该背景会改变颜色。

(按钮中间有一个文字)

问题: 我需要显示全部这些按钮,对于每个按钮,所选状态的颜色可能会有所不同,并且按钮之间会发生变化。

因此,如果我有:Button1,Button2,Button3,那么对于它们中的每一个,当它们被选中时,背景颜色都是不同的。

我可以以某种方式控制可绘制xml使用的颜色吗?

button_background:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="10dp"
    android:shape="rectangle" >
    <solid android:color="@color/dynamicColor" /> --> how can I control this color?

    <corners
        android:bottomLeftRadius="20dp"
        android:bottomRightRadius="20dp"
        android:topLeftRadius="20dp"
        android:topRightRadius="20dp" />
</shape>

2 个答案:

答案 0 :(得分:1)

是的,您可以通过编程方式更改可绘制文件的Solid color。如下所示。

val drawable = view.getBackground() as GradientDrawable // here view is your textview reference.
drawable.setColor(Color.GREEN) // set your color here

答案 1 :(得分:0)

在res / drawable /文件夹中创建一个BtnStateDrawable.xml,然后设置不同的状态ShapeDrawable。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["true" | "false"]
    android:dither=["true" | "false"]
    android:variablePadding=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource" . //here is your shapedrawable
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_hovered=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_activated=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>