这个AppCompat代码在Marshmallow上工作正常,可以在Lollipop API 22设备上对AppCompatCheckbox中的复选标记,文本和背景进行着色,尽管文本和背景都是有色的,但复选标记本身并没有。为什么呢?
public static void applyThemeToCheckBox(AppCompatCheckBox checkbox, @ColorInt int backgroundColor, @ColorInt int textColor) {
checkbox.setTextColor(textColor);
checkbox.setBackgroundColor(backgroundColor);
int[] colors = new int[] {
textColor,
textColor,
textColor,
textColor
};
ColorStateList colorStateList = new ColorStateList(getStates(), colors);
checkbox.setSupportButtonTintList(colorStateList);
}
private static int[][] getStates() {
return new int[][] {
new int[] { android.R.attr.state_enabled}, // enabled
new int[] {-android.R.attr.state_enabled}, // disabled
new int[] {-android.R.attr.state_checked}, // unchecked
new int[] { android.R.attr.state_pressed} // pressed
};
}
我看过使用DrawCompat(我们怎么知道这些东西存在?)并且它在其他情况下对我有用,但我看不到如何访问API 22上的复选标记。
请不要涉及静态主题的解决方案,应用程序根据API响应动态设置样式,着色必须以编程方式完成。