中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

Android中CheckBox與CompoundButton源碼解析

小云
87
2023-09-20 08:28:47
欄目: 編程語言

CheckBox和CompoundButton都是Android中的View控件,它們都繼承自Button類,因此它們具有Button的一些屬性和方法。下面分別對CheckBox和CompoundButton的源碼進行解析。

  1. CheckBox源碼解析:

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()等。

  1. CompoundButton源碼解析:

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中定義了一些與選擇狀態相關的方法和屬性,以及選中狀態改變的監聽器接口。

0
桓台县| 抚远县| 米脂县| 秦皇岛市| 额尔古纳市| 襄汾县| 安泽县| 大化| 凭祥市| 萝北县| 资中县| 巴楚县| 关岭| 许昌县| 睢宁县| 本溪市| 三河市| 日照市| 波密县| 博野县| 茂名市| 德保县| 双牌县| 长沙县| 姚安县| 惠水县| 宜城市| 云霄县| 赣榆县| 桐乡市| 开鲁县| 松潘县| 贵定县| 凉城县| 越西县| 永登县| 永新县| 丰原市| 惠安县| 德钦县| 罗田县|