Android自定义控件 _ 高可扩展单选按钮(再也不和产品经理吵架了)

本文介绍了一种在Android中创建高度可扩展的单选按钮的方法,通过抽象基类Selector实现点击切换选中状态,并允许子类自定义布局。文中详细展示了Selector类的实现,包括读取自定义属性、子类必须实现的抽象方法以及添加选中状态的动画。同时,文章提出了一个无形的SelectorGroup类来管理单选组,确保单选按钮之间的互斥选中。
摘要由CSDN通过智能技术生成

public abstract class Selector extends FrameLayout implements View.OnClickListener {

public Selector(Context context) {
super(context);
initView(context, null);
}

public Selector(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context, attrs);
}

public Selector(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context, attrs);
}

private void initView(Context context, AttributeSet attrs) {
//实现特性1:可点击
this.setOnClickListener(this);
}

@Override
public void onClick(View v) {
//实现特性2:点击后改变选中状态
boolean isSelect = switchSelector();
}

//反转选中状态
public boolean switchSelector() {
boolean isSelect = this.isSelected();
this.setSelected(!isSelect);
return !isSelect;
}
}

为满足业务场景,需要新增附加特性:可自定义按钮内元素相对布局

附加特性会随着业务需求变化而变化,可以用模版方法模式将这层变化封装起来:由Selector定义初始化算法框架,将真正界面初始化延后到子类进行。

  • 虽然这次业务场景中,单选按钮元素的布局是:图片在上,文字在下。下次换了咋办?所以定义元素布局应该作为一个抽象函数交给Selector子类实现。
  • 为了实现选中的渐变效果,Selector需提供选项变更的时机。
  • 按钮包含一些基本的属性,比如按钮名称,按钮图标,将这些属性写成自定义属性并传递给子类解析,代码如下:

public abstract class Selector extends FrameLayout implements View.OnClickListener {

public Selector(Context context) {
super(context);
initView(context, null);
}

p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值