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

时间:2015-02-19 03:39:11

标签: android checkbox customization

所以我一直在尝试自定义CheckBox的外观,并且一直在努力遵循在SO和其他网站上发布的方法。我写了一个可绘制的XML并将其放在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>

这是我对应的主要活动的类文件,

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());
    }

}

在加载页面时,复选框按钮仅显示与未选中资源对应的图像。为了确保我有不同的图像,我设置所有资源,检查以及未检查到已检查的图像,并显示已检查的图像。但是,当我为未经检查的状态引入资源时,繁荣,唯一的图像显示是未经检查的。
再次,为了验证是否正在检查复选框,我设置了一个获取isChecked的方法,是的,它运行正常。

有人能指出这个中的错误吗?

2 个答案:

答案 0 :(得分:2)

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

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" />

注意:您可以根据您的要求更改保证金填充。 它肯定会满足您的需求。

答案 1 :(得分:0)

在选择器中更改此内容

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

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

这只是一个愚蠢的错误。