In this example creating a checkbox and using style to give custom look.
Using selectors to call checkbox checked state xml and unchecked state xml.
Using xml file to create shape with the use of gradient,stroke tags to give custom look for checkbox checked and unchecked state.

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.TextView;
public class CustomCheckbox extends Activity implements OnClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
CheckBox checkb = ( CheckBox ) findViewById( R.id.checkb );
checkb.setOnClickListener(this);
}
@Override
public void onClick(View v) {
TextView output = (TextView)findViewById(R.id.textview1);
if (((CheckBox)v).isChecked()) {
output.setText("checked");
} else {
output.setText("unchecked");
}
}
}
Define android:button="@xml/custom_checkbox" custom xml for checkbox.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="16dip"
android:gravity="center"
android:padding="10dip"
android:text="Click on checkbox" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<CheckBox
android:id="@+id/checkb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:button="@xml/custom_checkbox"/>
<TextView
android:id="@+id/textview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14dip"
android:gravity="center"
android:padding="10dip"
android:text="unchecked" />
</LinearLayout>
</LinearLayout>
This xml file used for checkbox and called xml file for checkbox checked/unchecked state.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"
android:drawable="@xml/checked" />
<item android:state_pressed="true"
android:drawable="@xml/checked" />
<item android:drawable="@xml/unchecked" />
</selector>
Define shape for checkbox checked state.
<?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>
Define shape for checkbox unchecked state.
<?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>
Final words- Just download the project and run it using your emulator and if you have any doubts or suggestions, please place them in the comments.