2012-07-13 218 views
42

我搜索了一些地方,似乎无法找出复选框边框的CheckBox可绘制。任何人都可以指出我正确的方向吗?Android:设置CheckBox的颜色

这里是什么样子选中(可以勉强看到箱子)

enter image description here

这里是选中状态

enter image description here

这里是我想要做它看起来像。

enter image description here

+0

你可以设置为背景,以checkBox.so其采取的图片边界并设置它的背景。 – AkashG 2012-07-13 04:53:59

+3

设置'android:buttonTint =“@ color/mybrown”'是更改复选框颜色的简单方法。 – shauvik 2015-06-24 22:54:02

+0

android:buttonTint =“@ color/mybrown”会改变复选框边框的颜色。唯一的缺点是,它也改变了你可能不想要的刻度线的颜色。 – jetty 2015-08-18 07:56:37

回答

54

您可以使用自定义复选框xml文件这一点。保存下面的XML代码在drawables文件夹,命名为custom_checkbox.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/cbchk_blue" 
     android:state_focused="false"> 
    </item> 
    <item android:state_checked="true" 
     android:drawable="@drawable/cbchk_blue" 
     android:state_focused="true"> 
    </item> 
    <item android:state_checked="false" 
     android:drawable="@drawable/cbunchk_blue" 
     android:state_focused="false"> 
    </item> 
    <item android:state_checked="false" 
     android:drawable="@drawable/cbunchk_blue" 
     android:state_focused="true"> 
    </item> 
</selector> 

然后用这个文件作为你这样的复选框的背景:

 <CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:button="@drawable/custom_checkbox" 
     android:id="@+id/checkBox" /> 

我在这里上传自己的图片,我使用地方cbchk_bluecbunchk_blue的

Unchecked CheckBox Checked CheckBox

+0

看到它的布局很有意义。我找到很好的例子遇到了很多麻烦。 – Kirk 2012-07-13 21:56:09

+0

Ughhhh,为什么需要为复选框明确指定宽度和高度,但对于任何其他视图,我已经在(矩形)drawable中为其背景资源定义了一个形状,视图的背景色将假定该形状的“固体“属性值,而”笔画“将完美地绘制视图的边界。我发现一个复选框,如果宽度/高度被省略,然后形状崩溃到0!谢谢。 – samosaris 2013-05-24 20:12:29

+1

另外设置选择器作为复选框的按钮可绘制。 – 2014-03-05 06:55:48

33

同样的问题也会发生,当您使用主题全息黑暗的活动和白色背景。所以复选框有黑色风格。简单的解决方法是直接设置背景从Android的全息光:

int id = Resources.getSystem().getIdentifier("btn_check_holo_light", "drawable", "android"); 
checkBox.setButtonDrawable(id); 

你可以找到很好的概述,这一切的东西以下的答案是如何工作的: https://stackoverflow.com/a/10139809/1170154

+0

正是我一直在寻找过去几个小时。谢谢!! – jakeneff 2014-09-10 20:39:34

+2

这是我一直在寻找的机器人。谢谢!! – codinguser 2015-03-05 17:03:05

+0

这对我来说非常合适!谢谢! – wyzkid207 2015-07-08 14:45:17

27

由于Android 5和API等级21就可以自由地选择复选框的颜色(和许多其他小部件)。以下内容添加到您的values-v21/styles.xml(同时确保您有values/styles.xml较早的API回退:

<style name="CustomCheckBox"> 
    <item name="android:theme">@style/CheckBoxAppTheme</item> 
</style> 

<style name="CheckBoxAppTheme"> 
    <item name="android:colorAccent"> 
     @color/theFillColorInCheckedState 
    </item> 
    <item name="android:colorControlNormal"> 
     @color/theBorderColorInUncheckedState 
    </item> 
    <item name="android:colorControlHighlight"> 
     @color/theBackgroundColorWhenFocusingTheCheckBox 
    </item> 
</style> 

然后你只需要将样式应用到你的复选框,在布局:

<CheckBox 
    style="@style/CustomCheckBox" /> 

这它的复选框以你最喜欢的颜色出现!

+4

我觉得你缺少'android:colorControlActivated'。 – JJD 2015-02-24 17:00:49

+0

@Phoca,如何为版本21以前的版本创建回退风格? – lagos 2015-08-11 08:16:20

+1

对于21级以前的样式,您只设置了',''并导入''编译com.android.support:appcompat-v7:22.2.1' – lagos 2015-08-11 08:30:58

14

好的,所以我很抱歉,但大多数答案都不完整,或者有一些小错误。不同版本的Android的“样式”控制是史诗屁股疼痛。在一个项目的设计约束非常严格的项目中,我把头发拉了几天后,终于打破了我的头发,写了一个测试应用程序,然后真正挖掘并测试了各种用于样式开关和复选框的解决方案,因为当一个设计有一个它经常有另一个。这是我发现的...

第一个:你实际上不能设计其中任何一个,但是你可以将一个主题应用到所有的主题,或者只是其中的一个主题。

第二个:您可以使用XML完成所有操作,并且不需要第二个值-v21/styles.xml。

第三:,当涉及到交换机你有两个基本的选择,如果你想支持旧版本的Android(像我敢肯定,你这样做)......

  1. 可以使用SwitchCompat你将能够在不同的平台上看起来相同。
  2. 您可以使用Switch,您可以使用主题的其余部分或仅使用该特定开关,并在较旧版本的Android上进行主题处理,您只会看到一个未打印的旧方形开关。

好的,现在可以看到简单的参考码。再次,如果你创建一个简单的Hello World!并且放下这段代码就可以发挥你的心中的内容。所有这一切都在这里是锅炉板,所以我只是要包括活动和风格的XML ...

activity_main.xml中......

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.kunai.switchtest.MainActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="'Styled' SwitchCompat" /> 

    <android.support.v7.widget.SwitchCompat 
     android:id="@+id/switch_item" 
     android:layout_width="wrap_content" 
     android:layout_height="46dp" 
     android:layout_alignParentEnd="true" 
     android:layout_marginEnd="16dp" 
     android:checked="true" 
     android:longClickable="false" 
     android:textOff="OFF" 
     android:textOn="ON" 
     app:switchTextAppearance="@style/BrandedSwitch.text" 
     app:theme="@style/BrandedSwitch.control" 
     app:showText="true" /> 

</RelativeLayout> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.kunai.switchtest.MainActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Themed SwitchCompat" /> 

    <android.support.v7.widget.SwitchCompat 
     android:id="@+id/switch_item2" 
     android:layout_width="wrap_content" 
     android:layout_height="46dp" 
     android:layout_alignParentEnd="true" 
     android:layout_marginEnd="16dp" 
     android:checked="true" 
     android:longClickable="false" /> 

</RelativeLayout> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.kunai.switchtest.MainActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Themed Switch" /> 

    <Switch 
     android:id="@+id/switch_item3" 
     android:layout_width="wrap_content" 
     android:layout_height="46dp" 
     android:layout_alignParentEnd="true" 
     android:layout_marginEnd="16dp" 
     android:checked="true" 
     android:longClickable="false" 
     android:textOff="OFF" 
     android:textOn="ON"/> 

</RelativeLayout> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.kunai.switchtest.MainActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="'Styled' Switch" /> 

    <Switch 
     android:id="@+id/switch_item4" 
     android:layout_width="wrap_content" 
     android:layout_height="46dp" 
     android:layout_alignParentEnd="true" 
     android:layout_marginEnd="16dp" 
     android:checked="true" 
     android:longClickable="false" 
     android:textOff="OFF" 
     android:textOn="ON" 
     android:theme="@style/BrandedSwitch"/> 

</RelativeLayout> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.kunai.switchtest.MainActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="'Styled' CheckBox" /> 

    <CheckBox 
     android:id="@+id/checkbox" 
     android:layout_width="wrap_content" 
     android:layout_height="46dp" 
     android:layout_alignParentEnd="true" 
     android:layout_marginEnd="16dp" 
     android:checked="true" 
     android:longClickable="false" 
     android:theme="@style/BrandedCheckBox"/> 

</RelativeLayout> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.kunai.switchtest.MainActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Themed CheckBox" /> 

    <CheckBox 
     android:id="@+id/checkbox2" 
     android:layout_width="wrap_content" 
     android:layout_height="46dp" 
     android:layout_alignParentEnd="true" 
     android:layout_marginEnd="16dp" 
     android:checked="true" 
     android:longClickable="false"/> 

</RelativeLayout> 

styles.xml ...

<resources> 

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">#3F51B5</item> 
    <item name="colorPrimaryDark">#303F9F</item> 
    <item name="colorAccent">#FF4081</item> 
</style> 

<style name="BrandedSwitch.control" parent="Theme.AppCompat.Light"> 
    <!-- active thumb & track color (30% transparency) --> 
    <item name="colorControlActivated">#e6e600</item> 
    <item name="colorSwitchThumbNormal">#cc0000</item> 
</style> 

<style name="BrandedSwitch.text" parent="Theme.AppCompat.Light"> 
    <item name="android:textColor">#ffa000</item> 
    <item name="android:textSize">9dp</item> 
</style> 

<style name="BrandedCheckBox" parent="AppTheme"> 
    <item name="colorAccent">#aaf000</item> 
    <item name="colorControlNormal">#ff0000</item> 
</style> 

<style name="BrandedSwitch" parent="AppTheme"> 
    <item name="colorAccent">#39ac39</item> 
</style> 

我知道,我知道,你太懒惰了,你只是想让你的代码写出来。我知道了。这里是什么样子,当你运行它像...

API_21:

API 21

API_18:

API18

+0

这是一个完美的答案。让我的生活变得轻松。这应该是公认的。 – Rachit 2016-09-09 05:09:09

1

这将是最有效的方式。

机器人:buttonTint = “@彩色/黑白”

+0

tks ...Só简单! – cesarsicas 2017-10-04 18:20:39

5

您可以设置复选框颜色这样API21 &以上

机器人:buttonTint = “@颜色/ YOUR_COLOR”

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

对于支持旧版本使用V7库AppCompatCheckBox

应用:buttonTint = “@颜色/ YOUR_COLOR”

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