如何更改CheckBox的颜色?

时间:2011-05-02 06:22:28

标签: android android-checkbox

如何更改Android中的默认CheckBox颜色?
默认情况下,CheckBox颜色为绿色,我想更改此颜色 如果无法提供,请告诉我如何制作自定义CheckBox

25 个答案:

答案 0 :(得分:366)

您可以直接在XML中更改颜色。使用buttonTint框:(从API级别23开始)

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

您也可以使用appCompatCheckbox v7为较旧的API级别执行此操作:

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

答案 1 :(得分:110)

您可以设置复选框的android主题,以便在styles.xml中添加所需的颜色:

<style name="checkBoxStyle" parent="Base.Theme.AppCompat">
    <item name="colorAccent">CHECKEDHIGHLIGHTCOLOR</item>
    <item name="android:textColorSecondary">UNCHECKEDCOLOR</item>
</style>

然后在你的布局文件中:

<CheckBox
     android:theme="@style/checkBoxStyle"
     android:id="@+id/chooseItemCheckBox"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"/>

与使用android:buttonTint="@color/CHECK_COLOR"不同,此方法适用于Api 23

答案 2 :(得分:61)

如果您的minSdkVersion使用了android:buttonTint属性,则更新复选框的颜色:

<CheckBox
  ...
  android:buttonTint="@color/tint_color" />

在使用AppCompat库并支持21以下Android版本的项目中,您可以使用buttonTint属性的compat版本:

<CheckBox
  ...
  app:buttonTint="@color/tint_color" />

在这种情况下,如果您想要CheckBox的子类,请不要忘记使用AppCompatCheckBox

以前的答案:

您可以使用CheckBox属性更改android:button="@drawable/your_check_drawable"的drawable。

答案 3 :(得分:39)

程序化版本:

int states[][] = {{android.R.attr.state_checked}, {}};
int colors[] = {color_for_state_checked, color_for_state_normal}
CompoundButtonCompat.setButtonTintList(checkbox, new ColorStateList(states, colors));

答案 4 :(得分:24)

使用buttonTint和颜色选择器

<android.support.v7.widget.AppCompatCheckBox
                android:id="@+id/check"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:buttonTint="@color/checkbox_filter_tint"/>

RES /颜色/ checkbox_filter_tint.xml

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

答案 5 :(得分:15)

private static int GetWeekNumber(DateTime time)
{
    int week = GregorianCalendar.GetWeekOfYear(time, CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday);
    return week;
}

答案 6 :(得分:14)

我建议在android中使用he style方法作为配置内置android视图的方法,在你的项目中添加新风格:

<style name="yourStyle" parent="Base.Theme.AppCompat">
    <item name="colorAccent">your_color</item> <!-- for uncheck state -->
    <item name="android:textColorSecondary">your color</item> <!-- for check state -->
</style>

并添加将此样式指定给复选框的主题:  机器人:主题= “@风格/ youStyle”

希望这会有所帮助。

答案 7 :(得分:11)

styles.xml文件中添加此行:

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

答案 8 :(得分:8)

buttonTint为我工作了

android:buttonTint =“ @ color / white”

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:id="@+id/agreeCheckBox"
    android:text="@string/i_agree_to_terms_s"
    android:buttonTint="@color/white"
    android:layout_below="@+id/avoid_spam_text"/>

答案 9 :(得分:6)

我面临同样的问题,我使用以下技术获得了解决方案。将btn_check.xmlandroid-sdk/platforms/android-#(version)/data/res/drawable复制到项目的可绘制文件夹,然后将“开启”和“关闭”图像状态更改为自定义图像。
那么你的xml只需要android:button="@drawable/btn_check"

<CheckBox
    android:button="@drawable/btn_check"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:checked="true" />

如果您想使用不同的默认Android图标,可以使用:

android:button="@android:drawable/..."

答案 10 :(得分:3)

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

android:buttonTint="@color/app_color" //whatever color

答案 11 :(得分: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>

答案 12 :(得分:2)

嗨这是Dark Theme和Light Theme的主题代码。

<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>

如果你想改变复选框颜色,那么&#34; colorAccent&#34;属性将用于检查状态和&#34; android:textColorSecondary&#34;将用于取消选中状态。

&#34; actionOverflowButtonStyle&#34;将用于更改操作栏中溢出图标的颜色。

&#34; buttonsearch_picture&#34;属性将用于操作栏中操作按钮的更改色调颜色。这是style.xml中的自定义属性

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

同样适用于我在我的应用中使用的刷新按钮。

&#34;机器人:popupMenuStyle&#34;属性用于在Dark主题中获取Light主题弹出菜单样式。

<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>

答案 13 :(得分:1)

我的目标是使用自定义复选框按钮并去除强调色按钮的色调。我尝试了接受的答案,但现在确实有效,这对我有用:

styles.xml 文件中

<style name="Theme.Checkbox" parent="Widget.AppCompat.CompoundButton.CheckBox">
    <item name="android:button">@drawable/theme_checkbox_button</item>
    <item name="android:drawableLeft">@android:color/transparent</item>
    <item name="android:drawablePadding">10dp</item>
    <item name="android:buttonTint">@android:color/transparent</item>
    <item name="android:buttonTintMode">screen</item>
</style>

现在对于这个问题,只有必要的属性是 android:buttonTintandroid:buttonTintMode

现在有一些额外内容:

  • 我需要使用自定义 drawable,因此 android:button 设置了 selector drawable
  • 我需要在框和文本之间留一些间距,因此我遵循了 this SO answer 并设置了 android:drawableLeftandroid:drawablePadding

答案 14 :(得分:1)

如果textColorSecondary不适合您,则您可能已在主题中将colorControlNormal定义为其他颜色。如果是这样,只需使用

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

答案 15 :(得分:1)

Drawable resource file下创建一个xml res->drawable并为其命名,例如checkbox_custom_01.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/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命名您的复选框仍是一种好习惯。

答案 16 :(得分:0)

您可以在&#34; colors.xml&#34;

中使用以下两个属性
<color name="colorControlNormal">#eeeeee</color>
<color name="colorControlActivated">#eeeeee</color>

colorControlNormal用于复选框的普通视图,colorControlActivated用于选中复选框。

答案 17 :(得分:0)

如果您打算使用Android图标,如上所述..

android:button="@android:drawable/..."

..这是一个不错的选择,但为了工作 - 我发现你需要添加切换逻辑来显示/隐藏复选标记,如下所示:

    checkBoxShowPwd.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        // checkbox status is changed from uncheck to checked.
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            int btnDrawable = android.R.drawable.checkbox_off_background;

            if (isChecked)
            {
                btnDrawable = android.R.drawable.checkbox_on_background;
            }

            checkBoxShowPwd.setButtonDrawable(btnDrawable);

        }
    });

答案 18 :(得分:0)

100%稳健的方法。

就我而言,我无权访问XML布局源文件,因为我从第三方MaterialDialog库获取Checkbox。 因此,我必须以编程方式解决此问题。

  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. 然后将其应用于复选框:

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

P.S。另外,如果有人感兴趣,可以通过以下方法从MaterialDialog对话框中获取复选框(如果使用.checkBoxPromptRes(...)进行设置):

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

希望这会有所帮助。

答案 19 :(得分:0)

使用它可以在Java代码中动态更改Checkbox的背景

//在复选框上设置背景色。  checkbox.setBackgroundColor(Color.parseColor(“#00e2a5”));

此答案来自此site。您还可以使用此site将RGB颜色转换为需要提供parseColor的十六进制值

答案 20 :(得分:0)

有一种更简单的方法可以以编程方式设置颜色。使用以下方法,  Checkbox.setButtonTintList(ColorStateList.valueOf(getContext()。getColor(R.color.yourcolor)))

答案 21 :(得分:0)

大多数答案都通过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);
}

答案 22 :(得分:0)

我的 minSdkVersion 15,我的 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>

答案 23 :(得分:0)

你应该尝试下面的代码。它对我有用。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/checked" 
          android:state_checked="true">
        <color android:color="@color/yello" />
    </item>
    <!-- checked -->
    <item android:drawable="@drawable/unchecked" 
          android:state_checked="false">
        <color android:color="@color/black"></color>
    </item>
    <!-- unchecked -->
    <item android:drawable="@drawable/checked" 
          android:state_focused="true">
        <color android:color="@color/yello"></color>
    </item>
    <!-- on focus -->
    <item android:drawable="@drawable/unchecked">
        <color android:color="@color/black"></color>
    </item>
    <!-- default -->
</selector>

和CheckBox

<CheckBox
    Button="@style/currentcy_check_box_style"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="20dp"
    android:text="@string/step_one_currency_aud" />

答案 24 :(得分:0)

您可以通过将<CheckBox>嵌入<LinearLayout>来更改<LinearLayout>的背景颜色。然后将{{1}}的背景颜色更改为您想要的颜色。