我正在创建一个普通的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>
我已经发现我无法在运行时更改此样式:How to set colorAccent in code?
我想要的是在特定的复选框上更改此颜色,而不是全局更改应用。我可以在不创建特定资产的情况下完成吗?因为用户可以在运行时更改此颜色。
谢谢!
答案 0 :(得分:18)
下面的代码可以顺利运行,而不会减慢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)
答案 1 :(得分:10)
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);
答案 2 :(得分: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));
}
答案 3 :(得分:1)
对于API级别大于或等于Lolllipop。试试下面的
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
checkBox.buttonTintList = ColorStateList.valueOf(ContextCompat.getColor(context, R.color.color_rose))
}