以编程方式更改运行系统中的checkboxcolorAccent

我正在创build一个普通的checkbox视图:

<CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content"/> 

在这里输入图像说明

这浅绿色(#A5D6A7)是由于在主风格中定义的重音颜色

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorAccent">@color/green_light</item> 

我已经发现,我不能在运行时改变这种风格: 如何在代码中设置colorAccent?

我想要的是在特定的checkbox上更改此颜色,而不是全局覆盖应用程序。 我可以做,而不创build一个特定的资产? 因为用户可以在运行时改变这种颜色。

谢谢!

Solutions Collecting From Web of "以编程方式更改运行系统中的checkboxcolorAccent"

下面的代码将工作顺利,没有减慢检查和取消勾选checkbox.before行为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) 

使用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); 

这适用于我:

 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)); }