自定义 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" />
注意:您可以根据需要更改边距。
它一定会满足您的需要。
所以我一直在尝试自定义 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" />
注意:您可以根据需要更改边距。 它一定会满足您的需要。