obtainStyledAttributes小记

1. TypedArray

简单来说,TypedArray是通过obtainStyledAttributes方法检索得到的一系列属性的集合,其没有显示的构造方法,通过TypedArray.obtain() 方法从对象池中申请实例,因此使用完毕之后需要用**TypedArray.recycle()**进行回收,以便其他模块对其进行复用。其源码详细分析放在以后再看,现在只需要知道它保存了检索到的一系列属性就可以了。

2. obtainStyledAttributes方法参数小记

阅读源码可知,不同参数的obtainStyledAttributes方法最终调用的都是四参数的obtainStyledAttributes方法,那么我们看一下四参数的obtainStyledAttributes方法,其原型为:

public TypedArray obtainStyledAttributes(AttributeSet set,
                @StyleableRes int[] attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) {
            return mThemeImpl.obtainStyledAttributes(this, set, attrs, defStyleAttr, defStyleRes);
        }

看一下参数分别代表什么
AttributeSet Set:XML中定义的属性,可以理解为键值对的集合。

@StyleableRes int[] attrs:需要获取的属性名称集合,可以理解为键的集合。

@AttrRes int defStyleAttr:提供一个默认的属性集引用,该参数本身是一个属性值,该属性值是对当前Theme下一个属性集的引用,在XML中找不到相应属性时,就去该参数指向的属性集下寻找相应的属性。

@StyleRes int defStyleRes:提供一个默认的属性集,在前面两者都找不到相应属性时,去该默认属性集下找相应的属性。
当上述属性集中都找不到所需要检索的属性,就会去当前App的Theme中去获取相应属性,因此,在Theme里修改属性,该属性被应用的优先级是最低的

值得一提的是,还有一种设置属性的方法,即在XML中使用style属性来指定属性集,该种方法设置的属性,其优先级低于在XML中直接设置相关属性,高于用defStyleAttr设置属性

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值