0
This color is defined by the theme you use, so a first output would be to change the theme in Runtime - kind of weird, but possible.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
// chame setTheme antes de criar qualquer View
setTheme(android.R.style.Theme_Dark);
// ...
setContentView(R.layout.main);
}
If you want to change the theme after the creation of Activity
, you will have to recreate the activity and inform the new theme to be used.
If it seems very inefficient, you can also change the buttonTintList
of CheckBox
. For that, just call CheckBox#setButtonTintList(ColorStateList)
and you change how the Checkbox will be drawn in each state. There are two ways to create a ColorStateList
:
Code
private static final int[][] CHECK_BOX_STATES = new int[][] {
new int[] {-android.R.attr.state_enabled}, // desabilitado
new int[] { android.R.attr.state_checked}, // marcado
new int[] {-android.R.attr.state_checked}, // desmarcado
new int[] {} // default
};
private static final int[] CHECK_BOX_COLORS = new int[] {
Color.GRAY,
Color.CYAN,
Color.MAGENTA,
Color.MAGENTA
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
CheckBox checkBox = (CheckBox) findViewById(R.id.cb_id);
// limpa buttonTintList
checkBox.setButtonTintList(null);
checkBox.setButtonTintList(new ColorStateList(CHECK_BOX_STATES, CHECK_BOX_COLORS));
// ...
}
XML
Assets/checkbox_style.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#ffff00" />
<item android:state_checked="true"
android:color="#00ffff" />
<item android:state_checked="false"
android:color="#ff00ff" />
</selector>
Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
CheckBox checkBox = (CheckBox) findViewById(R.id.cb_id);
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
parser.setInput(getAssets().open("checkbox_style.xml"), "UTF-8");
checkBox.setButtonTintList(ColorStateList.createFromXml(getResources(), parser));
} catch (XmlPullParserException | IOException e) {
e.printStackTrace();
}
// ...
}
In neither of the two cases I was able to change the color of the Checkbox definitively. Via code the color changes only once for each state (for example: changes when check, but when unchecked does not return the color of the unchecked state), already via XML the emulator throws a bizarre exception complaining that the tag item
need to have an attribute android:color
.
For more information look at the documentation: Checkbox, CompoundButton#setButtonTintList(ColorStateList), Colorstatelist.
I hope I’ve helped.
I used the first part of his reply. As the user chooses the theme q he wants, it does not get as inefficient. Thank you
– Arubu