91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
茌平县| 临颍县| 禹城市| 吴川市| 新宁县| 仪征市| 鞍山市| 左贡县| 黄梅县| 高平市| 江安县| 银川市| 威信县| 元江| 湖口县| 隆德县| 塔河县| 宾川县| 孝义市| 嘉兴市| 昌邑市| 米泉市| 阜新| 峨边| 吉木萨尔县| 贵阳市| 万宁市| 安丘市| 嘉禾县| 扶余县| 和林格尔县| 涿鹿县| 云阳县| 南昌县| 米泉市| 衡阳市| 时尚| 炎陵县| 永宁县| 五莲县| 个旧市|