如何在Android中更改复选框勾选颜色

43

我正在开发安卓应用程序,其中使用了复选框,但默认的复选框勾选颜色为蓝色,我想把它改成黄色。是否有内置属性可设置复选框勾选颜色。


2
以下是解决方案:请查看此链接 - Phantômaxx
12个回答

44

很遗憾,改变复选框勾选标记的颜色不是一个简单的属性。

res\drawables\文件夹中创建一个名为cb_selector.xml的选择器XML文件。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/checked" />
    <item android:state_checked="false" android:drawable="@drawable/unchecked" />
</selector>
在你的布局文件中将此文件应用于你的 checkBox。
<CheckBox
    android:id="@+id/cb"
    android:text="My CheckBox"
    android:button="@drawable/cb_selector"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

在您的drawables文件夹中添加unchecked.pngchecked.png,它们是复选框的选中和未选中图像。


11
这使我的复选框消失了 O_O。 - Rohit Tigga
1
你需要在图像周围添加边框以显示框,其中一个图像将是空边框,另一个图像将带有勾选图像。 - asok Buzz
由于在android:drawable="@drawable/checked"中使用了颜色更改,导致图像消失。您需要使用图像! - ketom

28
你可以使用来自 android.support.v7 库的 AppCompatCheckBox 的属性 app:buttonTint。
<android.support.v7.widget.AppCompatCheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:buttonTint="@color/colorAccent"/>

优点:在 API 21 以下也可以使用,并且您不需要重新绘制复选框。


11

从API 21开始,您可以使用按钮着色属性。

android:buttonTint="#FFFF00"

6
如果你想以编程的方式实现这个功能,那么你只需要这样做:
final CheckBox cb = new CheckBox(getApplicationContext());
cb.setButtonTintList(getColorStateList(R.color.colorAccent));

Chris Stillwell的回答启发了我尝试这个方法,因为我不能简单地使用属性来设置颜色。 :)


1
同样也在xml中:android:buttonTint="@color/arancioneMedium" - sara
我不得不使用:cb.setButtonTintList(ColorStateList.valueOf(getResources().getColor(R.color.colorAccent, null))); - gig6

3

打开styles.xml文件并添加此行。

<style>
<item name="colorAccent">@android:color/holo_green_dark</item> 
</style>

使用此功能,您可以更改颜色或设置不同的颜色。


2
你的评论很好,但是你在回答中写了什么? - Shekhar
2
更改主题不会影响除复选框以外的其他内容吗? - Nicolás Carrasco-Stevenson
@Nicolas Carrasco 好的,只要你为这个样式创建一个ID,并将其仅应用于复选框,那就不会... - SmugDoodleBug

3

如果您只想更改色调颜色,则必须使用以下解决方案。它可以完美地工作。 在您的res/drawable文件夹中创建一个名为“check_box_tint.xml”的选择器。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="@color/your_checked_color" />
    <item android:state_checked="false" android:color="@color/your_unchecked_color" />
</selector>

现在将这个可绘制对象用作复选框着色的颜色。
<CheckBox
   android:id="@+id/cbSelectAll"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:buttonTint="@drawable/check_box_tint"/>

1

Kotlin版本:

checkBox.buttonTintList = ColorStateList.valueOf(R.color.colorPrimary)

2
注意:valueOf()需要颜色值而不是颜色资源。 - Barry Fruitman

0
首先,我们必须创建一个包含选中和未选中颜色情况的可绘制对象,然后您必须将此可绘制对象设置为buttonTint;
drawable_checkbox;
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="@color/kelleyGreen" />
    <item android:state_checked="false" android:color="@color/warmGrey" />
</selector>

<style name="CheckBox" parent="Widget.AppCompat.CompoundButton.CheckBox">
    <item name="android:textAppearance">@style/TextAppearance.Regular.XSmall</item>
    <item name="android:textColor">@color/warmGrey</item>
    <item name="buttonTint">@drawable/drawable_checkbox</item>
</style>

0

使用自定义选择器来控制复选框。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/patch_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/patch_normal" android:state_enabled="true"/>
    <item android:drawable="@drawable/patchdisable" android:state_enabled="false"/>


</selector>

像这样。


0
如果什么都不起作用,那就使用带有app:buttonCompat="your_drawable_selector"的AppCompatCheckBox

这适用于png。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接