以编程方式在运行时更改Checkbox colorAccent

Mar*_*lho 15 checkbox android colors android-drawable android-styles

我正在创建一个普通的Checkbox视图:

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

在此输入图像描述

浅绿色(#A5D6A7)是由主要风格定义的强调色:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorAccent">@color/green_light</item>
Run Code Online (Sandbox Code Playgroud)

我已经发现我无法在运行时更改此样式:如何在代码中设置colorAccent?

我想要的是在特定的复选框上更改此颜色,而不是全局覆盖应用程序.我可以在不创建特定资产的情况下完成吗?因为用户可以在运行时更改此颜色.

谢谢!

Amo*_*shi 19

下面的代码将顺利运行,而不会减慢check.andSucheck行为的复选框.因为checkbox.setSupportButtonTintList(colorStateList); 在某些设备上会出现意外行为

ColorStateList  colorStateList = new ColorStateList(
                        new int[][]{
                                new int[]{-android.R.attr.state_checked}, // unchecked
                                new int[]{android.R.attr.state_checked} , // checked
                        },
                        new int[]{
                                Color.parseColor("#cccccc"),
                                Color.parseColor("##cccccc"),
                        }
                );

 CompoundButtonCompat.setButtonTintList(checkBox,colorStateList)
Run Code Online (Sandbox Code Playgroud)


Ren*_*han 10

使用AppcompatCheckbox

 AppCompatCheckBox acb = (AppCompatCheckBox)findViewById(R.id.acb);
 ColorStateList colorStateList = new ColorStateList(
                new int[][]{

                     new int[]{-android.R.attr.state_enabled}, //disabled
                     new int[]{android.R.attr.state_enabled} //enabled
                },
                new int[] {

                     Color.RED //disabled
                     ,Color.BLUE //enabled

                }
        );

  acb.setSupportButtonTintList(colorStateList);
Run Code Online (Sandbox Code Playgroud)


Man*_*ger 7

这对我有用:

public void setCheckBoxColor(CheckBox checkBox, int checkedColor, int uncheckedColor) {
     int states[][] = {{android.R.attr.state_checked}, {}};
     int colors[] = {checkedColor, uncheckedColor};
     CompoundButtonCompat.setButtonTintList(checkBox, new 
         ColorStateList(states, colors));
}
Run Code Online (Sandbox Code Playgroud)