In Android, CheckBox
is a type of two state button either unchecked or checked in Android. You should use CheckBox
when presenting a group of selectable options to users that are not mutually exclusive. CompoundButton
is the parent class of CheckBox
class.
Unlike RadioButton, android CheckBox
works like toggle between two states.
<CheckBox android:id="@+id/cbState" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="State of Red button"/>
Below is a list of main properties of CheckBox
:
checked
is an attribute of CheckBox
used to set the current state of a CheckBox
.gravity
is an optional attribute which is used to control the alignment of the text in CheckBox
like left, right, center, top, bottom, center_vertical, center_horizontal etc.background
attribute is used to set the background of a CheckBox
. We can set a color or a drawable in the background of a CheckBox
.You can check the current state of a CheckBox
programmatically by using isChecked()
method. This method returns a Boolean
value either true
or false
. Below is an example code in which we checked the current state of a CheckBox
.
CheckBox cbState = (CheckBox) findViewById(R.id.cbState); //check current state of a check box (true or false) Boolean cbState = cbState.isChecked(); // set the current state of a check box cbState.setChecked(true); // listener for changes cbState.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // update your model } }); // listener on click cbState.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // update your model } });
Here’s some source code for a listener for a set of checkboxes
cbState1.setOnClickListener(checkboxClickListener); cbState2.setOnClickListener(checkboxClickListener); View.OnClickListener checkboxClickListener = new View.OnClickListener() { @Override public void onClick(View view) { boolean checked = ((CheckBox) view).isChecked(); if (checked) { String text = null; switch (view.getId()){ case R.id.cbState1: text = "State 1"; break; case R.id.cbState2: text = "State 2"; break; } Toast.makeText(MainActivity.this, text, Toast.LENGTH_LONG).show(); } } };
Following snippet makes CheckBox
read-only.
android:enabled="false"
We can also change color of CheckBox
.
<CheckBox android:id="@+id/cbState" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="State of Red button" android:theme="@style/CheckBoxTheme"/>
Code for styles.xml file.
<resources> ... <style name="CheckBoxTheme" parent="Theme.AppCompat.Light"> <item name="colorControlNormal">#FFC107</item> <item name="colorControlActivated">#9C27B0</item> </style> </resources>
We can also create a custom CheckBox
. Add three XML-based resources to the res/drawable folder, two that represent the drawing code for the actual CheckBox
and a third that is the state selector.
File res/drawable/checked.xml.
<?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#ffff0000" android:endColor="#ff000000" android:angle="270"/> <stroke android:width="4px" android:color="#ffc0c0c0" /> <size android:height="20dp" android:width="20dp"/> </shape>
File res/drawable/unchecked.xml.
<?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#ff585858" android:endColor="#ff000000" android:angle="270"/> <stroke android:width="4px" android:color="#ffc0c0c0" /> <size android:height="20dp" android:width="20dp"/> </shape>
File res/drawable/custom_checkbox.xml.
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:drawable="@drawable/checked" /> <item android:state_pressed="true" android:drawable="@drawable/checked" /> <item android:drawable="@drawable/unchecked" /> </selector>
Apply selector to the CheckBox
.
<CheckBox android:id="@+id/cbState" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="State of Red button" android:button="@drawable/custom_checkbox"/>