首页 > 代码库 > 自定义组件学习与总结

自定义组件学习与总结

通过将两个textview 一个checkbox,一个view,组合成一个自定义控件,并能够实现对其属性的自定义

1首先给出布局文件set_item_view.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="65dip" >

    <TextView
        android:id="@+id/tv_tittle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dip"
        android:layout_marginTop="10dip"
      
        android:textColor="#000000"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/tv_des"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv_tittle"
        android:layout_marginLeft="10dip"
    
        android:textColor="#88000000"
        android:textSize="18sp" />

    <CheckBox
        android:clickable="false"
       
        android:id="@+id/cb_status"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="10dip" />

    <View
        android:layout_width="fill_parent"
        android:layout_height="0.2dip"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="5dip"
        android:layout_marginRight="5dip"
        android:background="#000000" />

</RelativeLayout>

2 自定义一个类,并集成RelativeLayout,并实现其中的一些方法

public class SetItemView extends RelativeLayout {    private CheckBox cb_status;    private TextView tv_tittle;    private TextView tv_des;    private String deson;    private String desoff;    private void initview(Context context) {        View.inflate(context, R.layout.set_item_view, SetItemView.this);        cb_status = (CheckBox) findViewById(R.id.cb_status);        tv_tittle = (TextView) findViewById(R.id.tv_tittle);        tv_des = (TextView) findViewById(R.id.tv_des);    }    public SetItemView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        initview(context);    }    public SetItemView(Context context, AttributeSet attrs) {        super(context, attrs);        initview(context);        String tittle = attrs.getAttributeValue(                "http://schemas.android.com/apk/res/com.djf.mobilesafty",                "tittle");        deson = attrs.getAttributeValue(                "http://schemas.android.com/apk/res/com.djf.mobilesafty",                "deson");        desoff = attrs.getAttributeValue(                "http://schemas.android.com/apk/res/com.djf.mobilesafty",                "desoff");        tv_tittle.setText(tittle);        SetDesc(desoff);    }    public SetItemView(Context context) {        super(context);        initview(context);    }    // 判断组件是否被选中    public boolean isChecked() {        return cb_status.isChecked();    }    // 设置组件状态    public void SetChecked(boolean checked) {        if (checked) {            tv_des.setText(deson);        }        else {            tv_des.setText(desoff);        }        cb_status.setChecked(checked);    }    // 设置描述信息    public void SetDesc(String string) {        tv_des.setText(string);    }}

3 实现自定义组合控件的属性
先定义一个自定义的命名空间xmlns:djf="http://schemas.android.com/apk/res/com.djf.mobilesafty"

红色字体需要特别注意,一个为命名控件,一个为包名

然后就可以自定义属性

<com.djf.mobilesafty.ui.SetItemView
        android:id="@+id/siv_update"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        djf:desoff="自动升级已经关闭"
        djf:deson="自动升级已经开启"
        djf:tittle="设置自动升级状态" >
    </com.djf.mobilesafty.ui.SetItemView>

    <com.djf.mobilesafty.ui.SetItemView
        android:id="@+id/siv_update"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        djf:desoff="手机防盗状态已经关闭"
        djf:deson="手机防盗状态已经开启"
        djf:tittle="设置手机防盗状态" >
    </com.djf.mobilesafty.ui.SetItemView>

其中上面红色字体为上面自定义类的包名~~~~

至此一个简单的自定义组件及其属性介绍完毕,还可以为该自定义组件定义单击属性等~~~~

自定义组件学习与总结