Android 安卓:设置复选框的颜色

Android 安卓:设置复选框的颜色,android,android-layout,Android,Android Layout,我搜索了很多地方,似乎无法找到复选框边框的复选框。有人能给我指出正确的方向吗 以下是未选中的情况(几乎看不到方框) 这是检查状态 这就是我想让它看起来的样子 它由drawables指定:您可以为此使用自定义复选框xml文件。将下面的xml代码保存在drawables文件夹中,将其命名为custom\u checkbox.xml: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://sc

我搜索了很多地方,似乎无法找到复选框边框的
复选框。有人能给我指出正确的方向吗

以下是未选中的情况(几乎看不到方框)

这是检查状态

这就是我想让它看起来的样子


它由drawables指定:

您可以为此使用自定义复选框xml文件。将下面的xml代码保存在
drawables
文件夹中,将其命名为
custom\u 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>
<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
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:button="@drawable/custom_checkbox"
        android:id="@+id/checkBox" />

在这里,我上传了我自己的图片,我用它代替了cbchk_-bluecbunchk_-blue


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

int id = Resources.getSystem().getIdentifier("btn_check_holo_light", "drawable", "android");
checkBox.setButtonDrawable(id);
您可以在以下答案中找到所有这些工作原理的概述:

自Android 5和API level 21以来,可以自由选择复选框(以及许多其他小部件)的颜色。将以下内容添加到
values-v21/styles.xml
(同时确保在
values/styles.xml
中有早期API的备用项):

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

@样式/复选框应用主题
@颜色/填充颜色在ECKEDSTATE中
@颜色/边框颜色未检查状态
@颜色/聚焦复选框时的背景色
然后,您只需将样式应用于布局中的复选框:

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


就是这样,复选框以你最喜欢的颜色出现!

好吧,很抱歉,这些答案大部分都不完整或有一些小错误。在不同版本的Android上设置“样式化”控件是一件非常痛苦的事。在一个设计约束非常严格的项目上,我花了好几天时间才完成了这个任务nally崩溃并编写了一个测试应用程序,然后真正深入并测试了各种各样的开关和复选框样式解决方案,因为当一个设计有一个时,它经常有另一个。以下是我发现的

首先:您实际上无法为其中任何一个应用样式,但您可以将一个主题应用于所有主题,或仅应用于其中一个主题

Second:您可以从XML完成所有操作,而不需要第二个values-v21/styles.XML

第三:当谈到交换机时,如果你想支持旧版本的Android,你有两个基本的选择(我相信你会这样做)

  • 您可以使用
    SwitchCompat
    ,并且可以使它在不同平台上看起来相同
  • 你可以使用
    开关
    ,你可以将它与你的主题的其余部分一起主题化,或者只使用那个特定的开关,在旧版本的Android上,你只会看到一个没有样式的旧方形开关
  • 好的,现在是简单的参考代码。同样,如果您创建一个简单的Hello World!并将此代码放入其中,您就可以随心所欲地播放内容了。所有这些都在这里,所以我将包括活动和样式的XML

    活动\u main.xml

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

    
    

    API_18:


    这将是最有效的方法


    android:buttonint=“@color/black”

    您可以像这样设置API21及以上的复选框颜色

    android:buttonint=“@color/YOUR_color”

    
    
    对于较旧版本的支持,请使用V7库的AppCompatCheckBox

    app:buttonint=“@color/YOUR_color”

    
    

    您可以将图像设置为复选框的背景。因此,拍摄具有边框的图像并设置其背景。设置
    android:buttonint=“@color/mybrown”
    是更改复选框颜色的简单方法。android:buttonint=“@color/mybrown”确实会更改复选框边框的颜色。唯一的缺点是,它还会更改您可能不想要的勾号的颜色。这样布置很有意义。我很难找到好的示例。嗯,为什么需要为复选框显式指定宽度和高度,但对于任何其他视图,我都使用了形状de该视图的背景颜色将采用形状的“实体”属性值和“笔划”,并以(矩形)可绘制的背景资源进行细化可以完美地绘制视图的周长。我发现使用复选框,如果省略了宽度/高度,则形状将塌陷为0!!!谢谢。另外,请将选择器设置为复选框的可绘制按钮。如果像我这样的noob找到此答案,但现在不知道如何使用它:在可绘制目录中创建xml文件,复制粘贴编码并将创建的样式设置为按钮属性(xml的文件名=样式名称)有关复选框,请参见details@user2345998我编辑了答案以使其更清楚。感谢您提供的详细信息。我似乎很难确定这两个属性是否有责任。谢谢。+1如何更改颜色?这正是我过去几个小时一直在寻找的。谢谢!!这是我一直在寻找的机器人。谢谢!!这个应该是例外的答案。正是我所需要的帮助了我很多!谢谢陌生人!我也会在这个问题上加入我。这比公认的答案更容易实现。我正在Xamarin中开发。我想你缺少了
    android:colorControlActivated
    @Phoca,如何为21级之前的版本创建回退样式?对于21级之前的样式,您只需设置
    并导入`
    编译com.android。支持:appcompat-v7:22.2.1
    当最终注意到colorAccent在“android:theme”中而不是样式中时,此解决方案对我有效。这是一个完美的答案。让我的生活变得轻松。这应该是公认的解决方案
    <CheckBox
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:buttonTint="@color/YOUR_COLOR" />
    
    <android.support.v7.widget.AppCompatCheckBox 
        android:layout_height="wrap_content"
        android:layout_width="match_parent"  
        app:buttonTint="@color/YOUR_COLOR" />