文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android中CheckBox与CompoundButton源码解析

2023-09-20 11:53

关注

CheckBox和CompoundButton都是Android中的View控件,它们都继承自Button类,因此它们具有Button的一些属性和方法。下面分别对CheckBox和CompoundButton的源码进行解析。
1. CheckBox源码解析:
CheckBox是一个可选的标志,可以用于表示选中或未选中状态。CheckBox继承自CompoundButton类。以下是CheckBox的部分源码解析:
```java
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()等。
2. CompoundButton源码解析:
CompoundButton是一个抽象类,它继承自Button类,并实现了Checkable接口。以下是CompoundButton的部分源码解析:
```java
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中定义了一些与选择状态相关的方法和属性,以及选中状态改变的监听器接口。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯