制作一个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