全速加载中

Android开发学习笔记-自定义控件的属性

若想让自定义控件变得更加方便灵活,则就需要对控件进行定义属性,使其用起来更方便。

下面是自定义控件属性的方法

1、添加attrs.xml,内容格式样式可以参考sdk\platforms\android-10\data\res\values\attrs.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <declare-styleable name="CompoundButton">
     
        <attr name="desc_title" format="string" />
        <attr name="desc_on" format="string"/>
        <attr name="desc_off" format="string"/>
    </declare-styleable>
</resources>

2、在布局文件中引用命名空间,并设置自定义属性值,其中命名控件后面的为应用程序包名

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:frank="http://schemas.android.com/apk/res/com.frank.mobilesafe" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tv_maintitle"
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:background="#8866ff00"
        android:gravity="center"
        android:text="设置中心"
        android:textSize="22sp" />

   <com.frank.mobilesafe.ui.SettingItemView
       frank:desc_title="有新版本升级控制"
       frank:desc_on="有新版本则进行升级"
       frank:desc_off="不进行升级"
       android:id="@+id/siv_update"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       />
</LinearLayout>

3、在自定义控件的类里面的构造方法中对属性值进行获取或者设置。

public SettingItemView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView(context);
        String myNamespace = "http://schemas.android.com/apk/res/com.frank.mobilesafe";
        str_desc_title = attrs.getAttributeValue(myNamespace,
                "desc_title");
        str_desc_on = attrs.getAttributeValue(myNamespace,
                "desc_on");
        str_desc_off = attrs.getAttributeValue(myNamespace,
                "desc_off");
        tv_update_title.setText(str_desc_title);

    }

4、可对自定义属性值做其他用途的处理

/**
     * 设置组合控件的状态
     * 
     * @param isChecked
     */
    public void SetChecked(boolean isChecked) {
        cb_update.setChecked(isChecked);
        if(isChecked)
        {
            SetDesc(str_desc_on);
        }
        else
        {
            SetDesc(str_desc_off);
        }
    }

    /**
     * 设置描述信息
     * 
     * @param isChecked
     */
    public void SetDesc(String text) {
        tv_update_content.setText(text);
    }

 

posted @ 2014-10-09 23:36  许鸿飞  阅读(1214)  评论(1编辑  收藏  举报