CheckBox和CompoundButton都是Android中的View控件,它們都繼承自Button類,因此它們具有Button的一些屬性和方法。下面分別對CheckBox和CompoundButton的源碼進行解析。
CheckBox是一個可選的標志,可以用于表示選中或未選中狀態。CheckBox繼承自CompoundButton類。以下是CheckBox的部分源碼解析:
public class CheckBox extends CompoundButton {
// 構造方法
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);
}
}
在構造方法中,CheckBox調用了父類CompoundButton的構造方法,傳遞了相應的參數。CompoundButton是一個抽象類,它繼承自Button類,并實現了Checkable接口。CompoundButton中定義了一些與選擇狀態相關的方法和屬性,例如setChecked()、isChecked()等。
CompoundButton是一個抽象類,它繼承自Button類,并實現了Checkable接口。以下是CompoundButton的部分源碼解析:
public abstract class CompoundButton extends Button implements Checkable {
// 選中狀態改變監聽器
private OnCheckedChangeListener mOnCheckedChangeListener;
// 按鈕的選中狀態
private boolean mChecked;
// 是否正在設置選中狀態
private boolean mBroadcasting;
// 構造方法
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);
// 初始化選中狀態
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();
}
}
// 設置選中狀態
public void setChecked(boolean checked) {
if (mChecked != checked) {
mChecked = checked;
refreshDrawableState();
// 通知選中狀態改變
if (!mBroadcasting) {
mBroadcasting = true;
if (mOnCheckedChangeListener != null) {
mOnCheckedChangeListener.onCheckedChanged(this, mChecked);
}
mBroadcasting = false;
}
}
}
// 獲取選中狀態
public boolean isChecked() {
return mChecked;
}
// 添加選中狀態改變監聽器
public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
mOnCheckedChangeListener = listener;
}
// 選中狀態改變監聽器接口
public interface OnCheckedChangeListener {
void onCheckedChanged(CompoundButton buttonView, boolean isChecked);
}
}
CompoundButton中定義了一些方法和屬性,用于設置和獲取選中狀態,以及添加選中狀態改變監聽器。在構造方法中,CompoundButton會根據傳入的屬性初始化選中狀態。setChecked()方法用于設置選中狀態,并在狀態改變時通知監聽器。isChecked()方法用于獲取當前的選中狀態。
總結:
CheckBox是一個可選的標志,繼承自CompoundButton類,而CompoundButton是一個抽象類,繼承自Button類,并實現了Checkable接口。CompoundButton中定義了一些與選擇狀態相關的方法和屬性,以及選中狀態改變的監聽器接口。