【问题标题】:Customized CheckBox not switching button images on being checked / unchecked (Android)自定义 CheckBox 在选中/未选中时不切换按钮图像(Android)
【发布时间】:2015-02-19 03:39:11
【问题描述】:

因此,我一直在尝试自定义 CheckBox 的外观,并努力遵循 SO 和其他网站上发布的方法。我写了一个可绘制的 XML 并将它放在 drawables 文件夹中。这是其中的代码。
这是我放置在 drawables 文件夹中的 customchecker.xml。

<?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,是的,它工作正常。

谁能指出其中的错误?

【问题讨论】:

    标签: android checkbox customization


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      在您的选择器中更改此项

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

      到

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

      这只是一个愚蠢的错误。

      【讨论】:

      • 我的错。万分感谢!我第一次尝试该示例时,我已经正确设置了值,但它不起作用。现在,突然之间,它起作用了!非常感谢!
      猜你喜欢
      • 2014-06-03
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 2014-09-25
      • 2011-07-28
      • 1970-01-01
      • 2013-09-03
      • 2012-03-07
      相关资源
      最近更新 更多