更改Android复选框选中标记的默认颜色

14

我该如何将Android默认复选框的绿色勾选标记更改为特定CheckBox的蓝色?


1
似乎是 这个问题 的重复。 - nTraum
3
区别在于这个问题有一个真实而全新的答案。 - Code Droid
可能是如何更改CheckBox的颜色?的重复问题。 - afathman
2个回答

22

很遗憾,更改颜色并不是一个简单的属性。选中标记是一个图像,因此您必须创建自定义图像。请查看这个示例

创建一个选择器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/star_down" />
    <item android:state_checked="false" android:drawable="@drawable/star" />
</selector>

将此xml文件保存在res\drawables\文件夹中。然后在布局文件中像这样应用它到你的复选框:

<CheckBox
    android:text="Custom CheckBox"
    android:button="@drawable/checkbox_selector"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
在这个例子中,您需要将选择器文件命名为"checkbox_selector.xml",并且您还需要在drawable文件夹中拥有一个star_down.png和star.png。您可以使用这种技术通过将系统复选框图像更改为所需颜色来创建不同颜色的复选框,并在选择器中引用修改后的png文件。

1
虽然您提供的示例很好,但值得注意的是链接会失效。通常在带有链接的答案中,您需要同时发布链接中相关的内容。由于这个答案将长期存在,如果链接已经失效,它将对未来的人们毫无用处。现在,它仍将帮助他们实现他们想要的目标。 - FoamyGuy

8

如果使用xml,使用buttonTint很容易实现(API级别23及以上):

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:buttonTint="@color/COLOR_HERE" />

正如Nicolás所指出的,您可以使用appCompatCheckbox v7来处理旧版本API:

<android.support.v7.widget.AppCompatCheckBox 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:buttonTint="@color/COLOR_HERE" /> 

2
您可以使用appcompat和<android.support.v7.widget.AppCompatCheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" app:buttonTint="@color/COLOR_HERE" />从API级别7开始实现此操作。 - Nicolás Carrasco-Stevenson
在这种情况下,禁用的复选框保持亮度,不会变成灰色。 - Alexander Tumanin
请使用HexAndBugs的答案返回翻译后的文本。 - Alexander Tumanin

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