Android以编程方式更改自定义单选按钮中使用的形状颜色

时间:2018-11-25 18:11:05

标签: android kotlin radio-button custom-controls shapes

我使用以下代码创建自定义单选按钮:

layout.xml

<RadioButton
        android:id="@+id/radio0"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:background="@drawable/control_radio_button"
        android:button="@android:color/transparent"
        android:checked="false" />

@ drawable / control_radio_button

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/control_radio_bg_false" android:state_checked="true" android:state_pressed="true" />
    <item android:drawable="@drawable/control_radio_bg_true" android:state_pressed="true" />
    <item android:drawable="@drawable/control_radio_bg_true" android:state_checked="true" />
    <item android:drawable="@drawable/control_radio_bg_false" />
</selector>

@ drawable / control_radio_bg_true

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="999dp" />
    <stroke
        android:width="2dip"
        android:color="#E0E0E0" />
    <solid android:color="#f44336" />
</shape>

@ drawable / control_radio_bg_true

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="999dp" />
    <stroke
        android:width="6dp"
        android:color="#bfbfbf" />
    <solid android:color="#f44336" />
</shape>

我可以通过编程方式更改@drawable/control_radio_bg_false@drawable/control_radio_bg_true的背景。

我想使用适配器(在recyclerview中)创建具有不同颜色的自定义单选按钮的列表。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以尝试以下操作:

(radio0.background as? ShapeDrawable)?.apply {
    paint.color = ContextCompat.getColor(context, R.color.new_color)
}

您需要自己处理状态,但这应该可以覆盖您。

答案 1 :(得分:0)

我对kotlin代码进行了大量研究,并发现了这一点。在此处添加此内容,以便其他人专门寻找kotlin。 在将可绘制形状添加为视图的背景后,在相应的活动中添加以下代码。

YourViewID.background.setColorFilter(Color.parseColor("#00000"),PorterDuff.Mode.SRC_OVER)