sajid Hussain
sajid Hussain

Reputation: 385

How to Change checkBox button icon in Android?

I want to change CheckBox Button icon/image when i checked checkboxes according to given condition. Here i am using MSQS i want if ANSWER Correct checked then change image of textbox, similarly when Answer check false then also changed image , i have save images in drawable please anyone tell me how it is possible. When Checkbox checked once then it should not be rechecked again or unchecked. Thanx in advance who will help me.

public void onCheckboxClicked(View view) {

    switch(view.getId()) {

        case R.id.chk_ans1ID:
            ans_2.setChecked(false);
            ans_3.setChecked(false);
            ans_4.setChecked(false);

            ans_2.setEnabled(false);
            ans_3.setEnabled(false);
            ans_4.setEnabled(false);

            if (QuizActivity.op1.equalsIgnoreCase(QuizActivity.ans)) {
                correct++;
            } else if (QuizActivity.op2.equalsIgnoreCase(QuizActivity.ans)) {
                ans_2.setChecked(true);
                incorrect++;
            } else if (QuizActivity.op3.equalsIgnoreCase(QuizActivity.ans)) {
                ans_3.setChecked(true);
                incorrect++;
            } else if (QuizActivity.op4.equalsIgnoreCase(QuizActivity.ans)) {
                ans_4.setChecked(true);
                incorrect++;
            } else {
                Toast.makeText(QuizActivity.this, "No Answer Match!", Toast.LENGTH_LONG).show();
                Toast.makeText(QuizActivity.this, "answer= "+ans, Toast.LENGTH_LONG).show();
            }
            break;

        case R.id.chk_ans2ID:
            ans_1.setChecked(false);
            ans_3.setChecked(false);
            ans_4.setChecked(false);

            ans_1.setEnabled(false);
            ans_3.setEnabled(false);
            ans_4.setEnabled(false);
            if (QuizActivity.op2.equalsIgnoreCase(QuizActivity.ans)) {
                correct++;
            } else if (QuizActivity.op1.equalsIgnoreCase(QuizActivity.ans)) {
                ans_1.setChecked(true);
                incorrect++;
            } else if (QuizActivity.op3.equalsIgnoreCase(QuizActivity.ans)) {
                ans_3.setChecked(true);
                incorrect++;
            } else if (QuizActivity.op4.equalsIgnoreCase(QuizActivity.ans)) {
                ans_4.setChecked(true);
                incorrect++;
            } else {
                Toast.makeText(QuizActivity.this, "No Answer Match!", Toast.LENGTH_LONG).show();
                Toast.makeText(QuizActivity.this, "answer= "+ans, Toast.LENGTH_LONG).show();
            }
            break;
    }
}

here is my xml of check box

<CheckBox
    android:id="@+id/chk_ans4ID"
    android:layout_width="match_parent"
    android:layout_height="64dp"
    android:button="@drawable/custom_checkbox"
    android:onClick="onCheckboxClicked"
    android:text="CheckBox" />

Here is my custom_checkbox.XML

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/checkbox_inactive" 
        android:state_checked="false"/>
    <item android:drawable="@drawable/checkbox_active"
        android:state_checked="true"/>
    <item android:drawable="@drawable/checkbox_inactive"/>

</selector>

It is working for me great on emulator, but when i use this app on Android mobile then text overwrite on checkbox button icon how i can prevent it?

Upvotes: 0

Views: 4969

Answers (2)

user4696837
user4696837

Reputation:

First off all create checkbox_icon.xml in drawable folder

<?xml version="1.0" encoding="utf-8"?>
   <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:state_checked="true" android:state_focused="true"
      android:drawable="@drawable/checkbox_on_background_focus_yellow" />
     <item android:state_checked="false" android:state_focused="true"
     android:drawable="@drawable/checkbox_off_background_focus_yellow" />
     <item android:state_checked="false"
     android:drawable="@drawable/checkbox_off_background" />
     <item android:state_checked="true"
     android:drawable="@drawable/checkbox_on_background" />
  </selector>

Then use it in layout xml like this

<CheckBox android:layout_width="wrap_content"
 android:layout_height="wrap_content" 
 android:text="new checkbox"
 android:background="@drawable/checkbox_back" 
 android:button="@drawable/checkbox_icon" />

Upvotes: 0

Abhishek Patel
Abhishek Patel

Reputation: 4328

Try this , Make this xml your drawable folder

custom_checkbox.xml

 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/checkbox_inactive" android:state_checked="false"/>
<item android:drawable="@drawable/checkbox_active" android:state_checked="true"/>
<item android:drawable="@drawable/checkbox_inactive"/>

</selector>

and used this for programatically add drawable

yourcheckbox.setButtonDrawable(R.drawable.custom_checkbox);

and used this for xml

android:button="@drawable/custom_checkbox"

Upvotes: 6

Related Questions