在v21前点击复选框

blu*_*yte 23 checkbox android

所以,我想将色调应用于AppCompat Checkbox.

棒棒糖一切正常:

android:buttonTint="@color/purple_FF4081"
Run Code Online (Sandbox Code Playgroud)

或者这样:

android:theme="@style/Theme.MyTheme.PurpleAccent"
Run Code Online (Sandbox Code Playgroud)

但设置任何这些参数并不会改变前Lollipop上的任何内容.仅在我colorAccent为应用主题设置时才有效.但我不希望所有小部件都改变它们的外观,只需要一个复选框.如果没有设置彩色抽屉,有没有办法做到这一点?

Dan*_*son 62

快速仅供参考,这已经全部引进的AppCompatActivity和新的支持库,后现改为以供参考(概述这里精美)复选框可以减淡使用themeatttribute并设置colorControlNormalcolorControlActivated:

styles.xml

<style name="MyCheckBox" parent="Theme.AppCompat.Light">  
<item name="colorControlNormal">@color/indigo</item>
<item name="colorControlActivated">@color/pink</item>
</style> 
Run Code Online (Sandbox Code Playgroud)

layout xml:

<CheckBox  
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:text="Check Box"
        android:theme="@style/MyCheckBox"/>
Run Code Online (Sandbox Code Playgroud)


Anu*_*iya 25

您可以直接在xml中着色.使用boxTint作为框:(从API级别23开始)

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:buttonTint="@color/CHECK_COLOR" />
Run Code Online (Sandbox Code Playgroud)

您还可以使用appCompatCheckbox v7为旧API执行此操作:

<android.support.v7.widget.AppCompatCheckBox 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:buttonTint="@color/COLOR_HERE" />
Run Code Online (Sandbox Code Playgroud)


and*_*seb 11

我需要以编程方式进行,经过一段时间的挖掘,我终于找到了这个解决方案(在Kitkat和Marshmallow上测试过),我会发布它,以防它帮助某人:

public static void setAppCompatCheckBoxColors(final AppCompatCheckBox _checkbox, final int _uncheckedColor, final int _checkedColor) {
    int[][] states = new int[][]{new int[]{-android.R.attr.state_checked}, new int[]{android.R.attr.state_checked}};
    int[] colors = new int[]{_uncheckedColor, _checkedColor};
    _checkbox.setSupportButtonTintList(new ColorStateList(states, colors));
}
Run Code Online (Sandbox Code Playgroud)

  • 使用新的支持库,您应该使用:CompoundButtonCompat.setButtonTintList(_checkbox,new ColorStateList(states,colors)); (3认同)
  • 你正在使用颜色res,你应该指定颜色本身,如下所示:'setAppCompatCheckBoxColors(checkBox,Color.YELLOW,Color.RED);' 或者在你的实例中这样:'setAppCompatCheckBoxColors(checkBox,activity.getResources().getColor(R.color.simple_red),activity.getResources().getColor(R.color.colorPrimary));' (2认同)