Decorating CheckBox in Android

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"/>
comments powered by Disqus