---------------setting_item---------------
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="80dp">
<TextView
android:layout_marginTop="10dp"
android:id="@+id/tv_settting_item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="22sp"
android:text="设置是否自动更新"/>
<TextView
android:id="@+id/tv_setting_item_subtitle"
android:layout_below="@+id/tv_settting_item_title"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="子标题"
android:textSize="18sp"/>
//下面的focusable和clickable是chekbox天生就有的属性,点击的优先级比组合控件高,所以吧组合控件设置了点击事件,就药吧checkbox的点击事件去掉
<CheckBox
android:focusable="false"
android:clickable="false"
android:id="@+id/ck_setting_item"
android:layout_marginRight="10dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<View
android:id="@+id/tv_setting_item_line"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#000000"
android:layout_marginRight="1dp"/>
</RelativeLayout>
/**
* Created by lambo on 2018/4/15.
* 自定义组合控件---多个控件组成,可以复用
*/
public class Setting_item extends RelativeLayout {
CheckBox cb;
private TextView tv_subtile;
private TextView tv_title;
private String descoff;
private String descon;
private String title;
//带一个参数的构造方法,初始化布局文件的时候调用
public Setting_item(Context context) {
super(context);
initView(context);
}
private void initView(Context context) {
//吧布局文件转换成view
View.inflate(context, R.layout.setting_item, this);
cb=findViewById(R.id.ck_setting_item);
tv_subtile = findViewById(R.id.tv_setting_item_subtitle);
tv_title = findViewById(R.id.tv_settting_item_title);
}
/*带两个参数的构造方法,布局文件使用的时候调用*/
public Setting_item(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
//获取命名空间(http://schemas.android.com/apk/res-auto)下的属性title,descon,descoff,在attr.xml中给textview中扩展了属性
title = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto","title");
descon = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto","descon");
descoff = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto","descoff");
tv_title.setText(title);
}
public Setting_item(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context);
}
//检验组合控件是否选中
public Boolean isChecked(){
return cb.isChecked();
}
//设置组合控件
public void setChecked(Boolean isChecked){
if(isChecked){
setSubtile(descon);
}else {
setSubtile(descoff);
}
cb.setChecked(isChecked);
}
//设置组合控件自标题的方法
public void setSubtile(String subtilte){
tv_subtile.setText(subtilte);
}
}
---------------------res/values/attr.xml-----------------添加属性
<?xml version="1.0" encoding="utf-8"?>
<resources>
//给自定义的组合控件Setting_item扩展属性
<declare-styleable name="Setting_item">
<attr name="title" format="string"/>
<attr name="descoff" format="string"/>
<attr name="descon" format="string"/>
</declare-styleable>
</resources>