Изменить флажок colorAccent во время выполнения программно
Я создаю обычный вид Checkbox:
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
![enter image description here]()
Этот светло-зеленый (# A5D6A7) обусловлен цветом акцента, определенным в основном стиле:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorAccent">@color/green_light</item>
Я уже нашел, что я не могу изменить этот стиль во время выполнения: Как установить colorAcent в коде?
Я хочу изменить этот цвет на определенном флажке, а не на глобальном приложении. Могу ли я это сделать без создания определенного актива? Поскольку пользователь сможет изменить этот цвет во время выполнения.
Спасибо!
Ответы
Ответ 1
Ниже код будет работать гладко, не замедляя проверку и снимите флажок checkbox.because 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)
Ответ 2
Используйте 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);
Ответ 3
Это работает для меня:
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));
}
Ответ 4
Для уровня API больше или равно Lolllipop. попробуйте ниже
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
checkBox.buttonTintList = ColorStateList.valueOf(ContextCompat.getColor(context, R.color.color_rose))
}