如何在Android中更改CheckBox的颜色

316
如何在Android中更改默认的CheckBox颜色? 默认情况下,CheckBox的颜色是绿色的,我想要改变这个颜色。 如果不可能的话,请告诉我如何制作自定义的CheckBox?

1
你是想改变字体的颜色吗?还是实际框的颜色? - user725913
1
实际的盒子颜色我改变了。 - Piyush
90
android:buttonTint="@color/mybrown" 进行设置是改变方框颜色的简单方法。 - shauvik
6
@Shauvik,它只是在使用物料设计工作 :) - Mucahit
12
最好使用app:buttonTint="@color/mybrown"来代替,这样可以在API < 21上工作。 - Nikaoto
显示剩余2条评论
27个回答

6
res->drawable下创建一个名为checkbox_custom_01.xml的xml Drawable资源文件
<?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/checkbox_custom_01_checked_white_green_32" />
  <item 
   android:state_checked="false" 
   android:drawable="@drawable/checkbox_custom_01_unchecked_gray_32" />
</selector>

请将自定义的复选框图像文件(我建议使用PNG格式)上传到res->drawable文件夹中。

然后进入您的布局文件并将复选框更改为以下内容:

<CheckBox
    android:id="@+id/checkBox1"
    android:button="@drawable/checkbox_custom_01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:text="CheckBox"
    android:textSize="32dip"/>

只要android:button指向你之前创建的正确的XML文件,你可以自定义任何内容。

新手提示:虽然不是必须的,但最好在整个布局树中使用唯一的id命名你的复选框。


5

100%稳健的方法。

在我的情况下,由于我从第三方MaterialDialog库获取Checkbox,所以我无法访问XML布局源文件。因此,我必须通过编程来解决这个问题。

  1. 在xml中创建一个ColorStateList:

res/color/checkbox_tinit_dark_theme.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/white"
        android:state_checked="false"/>
    <item android:color="@color/positiveButtonBg"
        android:state_checked="true"/>
</selector>
  1. Then apply it to the checkbox:

    ColorStateList darkStateList = ContextCompat.getColorStateList(getContext(), R.color.checkbox_tint_dark_theme);
    CompoundButtonCompat.setButtonTintList(checkbox, darkStateList);
    

顺便提一下,如果有人感兴趣,以下是您可以从MaterialDialog对话框中获取复选框的方法(如果您使用.checkBoxPromptRes(...)设置它):

CheckBox checkbox = (CheckBox) dialog.getView().findViewById(R.id.md_promptCheckbox);

希望这能帮到你。

5

您可以使用一行代码更改 checkbox 的颜色。

android:buttonTint="@color/app_color" //任何颜色


5

如果textColorSecondary无法使用,可能是因为你在主题中定义的colorControlNormal颜色不同。如果是这样,请使用:

<style name="yourStyle" parent="Base.Theme.AppCompat">
    <item name="colorAccent">your_checked_color</item> <!-- for checked state -->
    <item name="colorControlNormal">your_unchecked_color</item> <!-- for unchecked state -->
</style>

4

大多数答案都通过xml文件进行。如果您发现大多数Android版本的活动答案只有两个状态:选中和取消选中,请看我的解决方案:

Kotlin:


大部分答案会在xml文件中处理。如果你发现大多数Android版本都有一个活动答案,且只包含选中和取消选中两种状态,请看我的解决方案:
val colorFilter = PorterDuffColorFilter(Color.CYAN, PorterDuff.Mode.SRC_ATOP)
CompoundButtonCompat.getButtonDrawable(checkBox)?.colorFilter = colorFilter

Java:

ColorFilter colorFilter = new PorterDuffColorFilter(Color.CYAN, PorterDuff.Mode.SRC_ATOP);
Drawable drawable = CompoundButtonCompat.getButtonDrawable(checkBox);
if (drawable != null) {
    drawable.setColorFilter(colorFilter);
}

4
有一种更简单的方法可以通过设置ColorStateList来编程设置颜色。
 Checkbox.setButtonTintList(ColorStateList.valueOf(getContext().getColor(R.color.yourcolor)))

3

您好,这是适用于暗色主题和亮色主题的主题代码。

<attr name="buttonsearch_picture" format="reference"/>
<attr name="buttonrefresh_picture" format="reference"/>

<style name="Theme.Light" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@color/white</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:textColorPrimary">@color/black</item>
    <item name="android:textColorSecondary">@color/black</item>
    <item name="android:textColor">@color/material_gray_800</item>
    <item name="actionOverflowButtonStyle">@style/LightOverflowButtonStyle</item>
    <item name="buttonsearch_picture">@drawable/ic_search_black</item>
    <item name="buttonrefresh_picture">@drawable/ic_refresh_black</item>
</style>

<style name="Theme.Dark" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@color/white</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:textColorPrimary">@color/white</item>
    <item name="android:textColorSecondary">@color/material_gray_500</item>
    <item name="android:textColor">@color/material_gray_800</item>
    <item name="actionOverflowButtonStyle">@style/DarkOverflowButtonStyle</item>
    <item name="buttonsearch_picture">@drawable/ic_search_white</item>
    <item name="buttonrefresh_picture">@drawable/ic_refresh_white</item>
    <item name="android:colorBackground">#ffffff</item>
    <item name="android:alertDialogTheme">@style/LightDialogTheme</item>
    <item name="android:alertDialogStyle">@style/LightDialogTheme</item>
  <!-- <item name="android:textViewStyle">@style/AppTheme.Widget.TextView</item>-->
    <item name="android:popupMenuStyle">@style/PopupMenu</item>
</style>

如果您想改变复选框的颜色,则“colorAccent”属性将用于选中状态,“android:textColorSecondary”将用于未选中状态。
“actionOverflowButtonStyle”将用于更改操作栏中溢出图标的颜色。
“buttonsearch_picture”属性将用于更改操作栏中操作按钮的色调颜色。这是style.xml中的自定义属性。
<attr name="buttonsearch_picture" format="reference"/>

我正在使用的应用程序中也有刷新按钮,同样适用。

"android:popupMenuStyle"属性用于在暗色主题中获取轻主题弹出菜单样式。

<style name="PopupMenu" parent="Theme.AppCompat.Light.NoActionBar">
</style>

这是我在Rocks Player应用中使用的工具栏代码。

 <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    app:contentInsetStart="0dp"
    android:title="Rocks Player"
    android:layout_width="match_parent"
    android:elevation="4dp"
    android:layout_height="48dp"
    app:layout_scrollFlags="scroll|enterAlways"
    android:minHeight="48dp"
    app:titleTextAppearance="@style/Toolbar.TitleText"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    android:background="?attr/colorPrimary"
    >
</android.support.v7.widget.Toolbar>

主题:-

 <style name="AppTheme0" parent="Theme.Light">
    <item name="colorPrimary">#ffffff</item>
    <item name="colorPrimaryDark">#cccccc</item>
    <item name="colorAccent">#0294ff</item>
</style>

<style name="AppTheme1" parent="Theme.Dark">
    <item name="colorPrimary">#4161b2</item>
    <item name="colorPrimaryDark">#4161b2</item>
    <item name="colorAccent">#4161b2</item>
</style>

3
您可以在“colors.xml”中使用以下两个属性:
<color name="colorControlNormal">#eeeeee</color>
<color name="colorControlActivated">#eeeeee</color>

colorControlNormal 用于 checkbox 的正常视图,colorControlActivated 用于当 checkbox 被选中时的视图。


3

我的minSdkVersion15,我的BaseAppTheme父级是Theme.AppCompat.Light.NoActionBar,我正在通过编程方式创建我的复选框。下面的步骤对我有效。

1. 在你的Java代码中,将

CheckBox checkBox = new CheckBox(context);

为了

AppCompatCheckBox checkBox = new AppCompatCheckBox(context);

2. 在你的 styles.xml 文件中添加:

<style name="MyCheckboxStyle" parent="Widget.AppCompat.CompoundButton.CheckBox">
    <item name="buttonTint">@color/primary_dark</item>
</style>

3. 最后,在您的 BaseAppTheme(或 AppTheme)样式中,添加:

<item name="checkboxStyle">@style/MyCheckboxStyle</item>
<item name="android:checkboxStyle">@style/MyCheckboxStyle</item>

2
你可以在drawable中创建自己的xml,并使用android:background="@drawable/your_xml"将其作为背景。
在其中,你可以设置边框、圆角等等。
<item>
    <shape>
        <gradient

            android:endColor="#fff"
            android:startColor="#fff"/>
        <corners
            android:radius="2dp"/>
        <stroke
            android:width="15dp"
            android:color="#0013669e"/>

    </shape>
</item>


1
虽然了解可绘制矢量图形很好,但这个答案并没有回答关于按钮色调的问题。 - Mike Poole

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