---------------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>