android自定义属性

来源:互联网 发布:2015全球社交网络排名 编辑:程序博客网 时间:2024/06/07 00:18

1、创建自定义类

   创建自定义类 MyView

<com.example.testh5.view.MyView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    sdj:name = "abc"    sdj:age="10"    sdj:color="@drawable/bg_shap"    />

此时会报错,因为缺少了sdj这个命名空间,as提示补充

xmlns:sdj="http://schemas.android.com/apk/res-auto"

2、创建attrs.xml文件 

  在values下新建xml资源文件 attrs

<?xml version="1.0" encoding="utf-8"?><resources>   <!-- 定义名字为MyView属性集合-->    <declare-styleable name="MyView">        <attr name="name" format="string"/>        <attr name="age" format="integer"/>        <attr name="color" format="reference|color"/>    </declare-styleable></resources>


3、使用attrs文件定义的属性

  在自定义view的构造方法中 使用AttributeSet

  a.通过命名空间获取属性   

  String name = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto", "name");  String age = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto", "age");  String color = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto", "color");
 

  b.遍历属性集合

  for(int i =0;i<attrs.getAttributeCount();i++){    System.out.print(attrs.getAttributeName(i)+"===="+attrs.getAttributeValue(i));  }

 c.使用TypedArray获取属性值

  

TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyView);for (int i = 0;i<typedArray.getIndexCount();i++){    int index = typedArray.getIndex(i);    switch (index){        case R.styleable.MyView_name:            myname = typedArray.getString(index);            break;        case R.styleable.MyView_age:            break;        case R.styleable.MyView_color:            Drawable drawable = typedArray.getDrawable(index);            BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;            break;       }}
//回收typedArray.recycle();