自定义 CheckBox 在选中/取消选中时不切换按钮图像 (Android)

Customized CheckBox not switching button images on being checked / unchecked (Android)

所以我一直在尝试自定义 CheckBox 的外观,并努力遵循 SO 和其他网站上发布的方法。我写了一个drawableXML放在drawables文件夹里。这是其中的代码。
这是我的 customchecker.xml 放在 drawables 文件夹中。

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

这是我的布局 XML 文件,

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/textView"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="94dp"
        android:textSize="48dp" />

    <Chronometer
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/chronometer"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="82dp"
        android:textSize="80dp" />

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/checkBox"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:clickable="true"
        android:enabled="true"
        android:checked="true"
        android:button="@drawable/customchecker"
        android:onClick="cb"/>
</RelativeLayout>

这是我对应的 class 主文件 activity,

import android.os.CountDownTimer;
import android.os.SystemClock;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.Chronometer;
import android.widget.TextView;

import java.text.SimpleDateFormat;


public class MainActivity extends ActionBarActivity {
    TextView t;
    long millis = 50000;
    Chronometer c;
    CheckBox cb;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        t = (TextView) findViewById(R.id.textView);
        c = (Chronometer)findViewById(R.id.chronometer);
        c.start();
        cb = (CheckBox) findViewById(R.id.checkBox);
        //cb.setButtonDrawable(R.drawable.customchecker);


        m.start();
    }
    CountDownTimer m = new CountDownTimer(millis,1000) {
        @Override
        public void onTick(long millisUntilFinished) {
               t.setText(Long.toString(millisUntilFinished/1000));
        }

        @Override
        public void onFinish() {
                c.setBase(SystemClock.elapsedRealtime());
        }
    };

    public void cb(View view){
        System.out.println(cb.isChecked());
    }

}

加载页面时,复选框按钮仅显示与未选中资源对应的图像。只是为了确保我有不同的图像,我将所有资源设置为已检查和未检查到已检查的图像,并显示已检查的图像。但是当我为未检查状态引入资源时,boom,唯一的图像显示是未检查状态。
同样,为了验证复选框是否被选中,我设置了一个方法来获取 isChecked,是的,它工作正常。

谁能指出其中的错误?

在您的选择器中更改此项

     <item android:state_checked="false" android:drawable="@drawable/checked"/>

     <item android:state_checked="false" android:drawable="@drawable/unchecked"/>

这只是一个愚蠢的错误。

使用以下代码制作可绘制文件:

selector.xml

<?xml version="1.0" encoding="utf-8"?>

<item android:drawable="@drawable/favourite_active" android:state_checked="true"/>
<item android:drawable="@drawable/favourite" android:state_checked="false"/>

然后像下面这样设置 Checkbox 的属性:

<CheckBox
            android:id="@+id/cbFavourite"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/btnBuyNow"
            android:layout_marginRight="3dp"
            android:layout_toLeftOf="@+id/btnBuyNow"
            android:background="@drawable/tour_wish_check_uncheck_selector"
            android:button="@null"
            android:checked="false"
            android:paddingLeft="25dp" />

注意:您可以根据需要更改边距。 它一定会满足您的需要。