CheckBox和CompoundButton都是Android中的View控件,它們都繼承自Button類(lèi),因此它們具有Button的一些屬性和方法。下面分別對(duì)CheckBox和CompoundButton的源碼進(jìn)行解析。
CheckBox是一個(gè)可選的標(biāo)志,可以用于表示選中或未選中狀態(tài)。CheckBox繼承自CompoundButton類(lèi)。以下是CheckBox的部分源碼解析:
public class CheckBox extends CompoundButton {
// 構(gòu)造方法
public CheckBox(Context context) {
this(context, null);
}
public CheckBox(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.checkboxStyle);
}
public CheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public CheckBox(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
}
在構(gòu)造方法中,CheckBox調(diào)用了父類(lèi)CompoundButton的構(gòu)造方法,傳遞了相應(yīng)的參數(shù)。CompoundButton是一個(gè)抽象類(lèi),它繼承自Button類(lèi),并實(shí)現(xiàn)了Checkable接口。CompoundButton中定義了一些與選擇狀態(tài)相關(guān)的方法和屬性,例如setChecked()、isChecked()等。
CompoundButton是一個(gè)抽象類(lèi),它繼承自Button類(lèi),并實(shí)現(xiàn)了Checkable接口。以下是CompoundButton的部分源碼解析:
public abstract class CompoundButton extends Button implements Checkable {
// 選中狀態(tài)改變監(jiān)聽(tīng)器
private OnCheckedChangeListener mOnCheckedChangeListener;
// 按鈕的選中狀態(tài)
private boolean mChecked;
// 是否正在設(shè)置選中狀態(tài)
private boolean mBroadcasting;
// 構(gòu)造方法
public CompoundButton(Context context) {
this(context, null);
}
public CompoundButton(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.buttonStyle);
}
public CompoundButton(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public CompoundButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
// 初始化選中狀態(tài)
if (attrs != null) {
TypedArray a = context.obtainStyledAttributes(
attrs, R.styleable.CompoundButton, defStyleAttr, defStyleRes);
boolean checked = a.getBoolean(R.styleable.CompoundButton_android_checked, false);
setChecked(checked);
a.recycle();
}
}
// 設(shè)置選中狀態(tài)
public void setChecked(boolean checked) {
if (mChecked != checked) {
mChecked = checked;
refreshDrawableState();
// 通知選中狀態(tài)改變
if (!mBroadcasting) {
mBroadcasting = true;
if (mOnCheckedChangeListener != null) {
mOnCheckedChangeListener.onCheckedChanged(this, mChecked);
}
mBroadcasting = false;
}
}
}
// 獲取選中狀態(tài)
public boolean isChecked() {
return mChecked;
}
// 添加選中狀態(tài)改變監(jiān)聽(tīng)器
public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
mOnCheckedChangeListener = listener;
}
// 選中狀態(tài)改變監(jiān)聽(tīng)器接口
public interface OnCheckedChangeListener {
void onCheckedChanged(CompoundButton buttonView, boolean isChecked);
}
}
CompoundButton中定義了一些方法和屬性,用于設(shè)置和獲取選中狀態(tài),以及添加選中狀態(tài)改變監(jiān)聽(tīng)器。在構(gòu)造方法中,CompoundButton會(huì)根據(jù)傳入的屬性初始化選中狀態(tài)。setChecked()方法用于設(shè)置選中狀態(tài),并在狀態(tài)改變時(shí)通知監(jiān)聽(tīng)器。isChecked()方法用于獲取當(dāng)前的選中狀態(tài)。
總結(jié):
CheckBox是一個(gè)可選的標(biāo)志,繼承自CompoundButton類(lèi),而CompoundButton是一個(gè)抽象類(lèi),繼承自Button類(lèi),并實(shí)現(xiàn)了Checkable接口。CompoundButton中定義了一些與選擇狀態(tài)相關(guān)的方法和屬性,以及選中狀態(tài)改變的監(jiān)聽(tīng)器接口。