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();