通常のチェックボックスビューを作成しています。
<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.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 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));
}
Lolllipop以上のAPIレベルの場合。以下をお試しください
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
checkBox.buttonTintList = ColorStateList.valueOf(ContextCompat.getColor(context, R.color.color_rose))
}