android 自定义属性

1、定义属性名称、类型

需要再res/values/attrs.xml 文件中配置

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="InputView">
        <attr name="buttonNum" format="integer"/>        
    </declare-styleable>
</resources>

2、在自定义控件的xml配置中使用自定义的属性

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:InputView="http://schemas.android.com/apk/res/com.example.sample" //自定义属性的命名控件,最后一段为项目的package名
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<com.self.InputView
      android:layout_width="120dp"
    android:layout_height="150dp"
    InputView:buttonNum="33"  // 通过自定义的命名控件使用自定义的属性
    />
</LinearLayout>

3、在自定义的控件的构造方法中获取自定义的属性值

public class InputView extends EditText
{

    public InputView(Context context, AttributeSet attrs)
    {
        super(context, attrs);   
   
        TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.InputView);
        int num = a.getInt(R.styleable.InputView_buttonNum, 0);
        Log.d("", "------------self attrs : "+num);
        a.recycle(); 

    }
}

4、其他属性类型:string , integer , dimension , reference , color , enum.

前面几种的声明方式都是一致的,例如:<attr name="buttonNum" format="integer"/>。
只有enum是不同的,用法举例:

<attr name="testEnum">
    <enum name="fill_parent" value="-1"/>
    <enum name="wrap_content" value="-2"/>
</attr> 

还有另外一种简单做法,不许要使用xml配置属性名称、类型等,直接再attriable中获取属性值:

1、再自定义控件的构造方法中获取

resouceId = attrs.getAttributeResourceValue(null, "Text", 0);// 获取属性的资源id
if (resouceId > 0) 
{ Text
= context.getResources().getText(resouceId).toString();//根据id获取属性值 }

2、在xml文件中使用自定义的属性值

<com.EditText1 android:id="@+id/ss3"
        android:layout_width="wrap_content"     
        android:layout_height="wrap_content" Text="@string/app_name" />

 

 

 

链接:

http://www.cnblogs.com/ufocdy/archive/2011/05/27/2060221.html

http://hi.baidu.com/jwq359699768/item/8dd1e663eadb4194c5d24928

posted @ 2012-10-16 10:33  lipeil  阅读(357)  评论(0编辑  收藏  举报