您的位置:首页 > 移动开发 > Android开发

hongyang的博文深入理解Android中的自定义属性 学习笔记

2015-08-08 17:10 423 查看
自定义view属性已经写过不少了,但每次写时都是网上找个文章按步骤照葫芦画瓢,没有好好分析,尤其是对AttributeSet和TypedArray不太了解,今天看了hongyang的博文深入理解Android中的自定义属性,感觉认识进一步加深了,在此作下总结.

AttributeSet里面包含了我们在布局文件里面给view设置的所有属性,代码获取属性值的方法如下

public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);

        int count = attrs.getAttributeCount();
        for (int i = 0; i < count; i++) {
            String attrName = attrs.getAttributeName(i);
            String attrVal = attrs.getAttributeValue(i);
            Log.e(TAG, "attrName = " + attrName + " , attrVal = " + attrVal);
        }
    }


自定义属性声明文件里的每一个attr属性名都会生成一个id值存在于R文件中(系统每个attr属性名都有一个id值来标识,就像系统其它资源比如drawable中的图标都有唯一id标识一样),并且这些id以一个int数组的形式放在一起,通过R.styleable.test可以访问这些属性名id数组

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="test">
        <attr name="text" format="string" />
        <attr name="testAttr" format="integer" />
    </declare-styleable>
</resources>


通过方法TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.test)获取我们想要的属性数组(attrs包含我们所设置的所有属性,通过这个数组可以返回我们所关心的,即R.styleable.test属性名id标识的,也就是我们自定义的属性),然后TypedArray的系列get方法可以获取我们所需要的具体属性值

attrs.xml里面的declare-styleable以及item,android会根据其在R.java中生成一些常量方便我们使用(aapt干的),本质上,我们可以不声明declare-styleable仅仅声明所需的属性即可。

比如写成如下形式

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="testAttr" format="integer" />
</resources>


我们在View的构造方法中,可以通过AttributeSet去获得自定义属性的值,但是比较麻烦,而TypedArray可以很方便的便于我们去获取。我们在自定义View的时候,可以使用系统已经定义的属性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: