简单的自定义组合控件 自定义属性

制作一个textview和checkbox的自定义组合控件,点击文字区域也可以对checkbox进行操作,如图所示。


首先是条目布局,这个布局最终将作为一个整体来引用
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="horizontal">
    
    <TextView
        android:id="@+id/tv_combine"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="默认文本"/>

    <CheckBox
        android:focusable="false"
        android:id="@+id/cb_combine"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

new一个类,继承framelayout,实现三个构造方法,在每个构造方法中都进行初始化,关联刚刚创建好的布局,找到布局中的子控件,同时对外提供设置文字和是否选中的方法。对整个布局设置点击事件,使得任意位置都可以对checkbox进行设置。

public class CombineView extends FrameLayout implements View.OnClickListener {

    public CheckBox cb_combine;
    public TextView tv_combine;
    public String text;
    public boolean isCheched;

    public CombineView(Context context) {
        super(context);
        init();
    }

    public CombineView(Context context, AttributeSet attrs) {
        super(context, attrs);
        //获取自定义属性
        init();
    }

    public CombineView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        //在初始化中将布局加载进来
        View view = View.inflate(getContext(), R.layout.combineview, null);
        addView(view);
        cb_combine = (CheckBox) view.findViewById(R.id.cb_combine);
        tv_combine = (TextView) view.findViewById(R.id.tv_combine);
        
        this.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        cb_combine.setChecked(!cb_combine.isChecked());
    }

    public boolean isChecked(){
        return cb_combine.isChecked();
    }

    public void setText(String text){
        tv_combine.setText(text);
    }
}

此时,该控件还不能再xml文件中设置文字,是否选中,此时就需要我们为其添加自定义属性

自定义属性的步骤  
1  





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值