亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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
井研县| 原平市| 丘北县| 富蕴县| 达尔| 招远市| 临沂市| 青铜峡市| 湖南省| 桓台县| 岚皋县| 南召县| 南投县| 长汀县| 泸溪县| 石河子市| 虎林市| 资兴市| 蕉岭县| 三原县| 怀来县| 通化市| 讷河市| 乐陵市| 宁海县| 和林格尔县| 临泉县| 大洼县| 新和县| 浦北县| 溧阳市| 盈江县| 滨州市| 廊坊市| 丁青县| 丽水市| 宜君县| 新泰市| 保山市| 本溪市| 丹巴县|