所以我一直在尝试自定义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的方法,是的,它运行正常。
有人能指出这个中的错误吗?
答案 0 :(得分:2)
使用以下代码制作一个可绘制文件:
<?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"/>
这只是一个愚蠢的错误。