hongyang的博文深入理解Android中的自定义属性 学习笔记
2015-08-08 17:10
423 查看
自定义view属性已经写过不少了,但每次写时都是网上找个文章按步骤照葫芦画瓢,没有好好分析,尤其是对AttributeSet和TypedArray不太了解,今天看了hongyang的博文深入理解Android中的自定义属性,感觉认识进一步加深了,在此作下总结.
AttributeSet里面包含了我们在布局文件里面给view设置的所有属性,代码获取属性值的方法如下
自定义属性声明文件里的每一个attr属性名都会生成一个id值存在于R文件中(系统每个attr属性名都有一个id值来标识,就像系统其它资源比如drawable中的图标都有唯一id标识一样),并且这些id以一个int数组的形式放在一起,通过R.styleable.test可以访问这些属性名id数组
通过方法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仅仅声明所需的属性即可。
比如写成如下形式
我们在View的构造方法中,可以通过AttributeSet去获得自定义属性的值,但是比较麻烦,而TypedArray可以很方便的便于我们去获取。我们在自定义View的时候,可以使用系统已经定义的属性。
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的时候,可以使用系统已经定义的属性。
相关文章推荐
- Parcelable接口的使用
- xml布局内容总结(四)--Android
- Android studio 快捷键分享(Mac osx 10.5+)
- android用户界面之GridView教程实例汇总
- 【Android测试】【第七节】Monkey——源码浅谈
- Android数据手册01:Android颜色码制表
- Android四大组件之BroadCast(续)
- Android widget 之RemoteView
- Android搜索框(保存历史记录和自动匹配)带有ScrollView嵌套ListView阻尼效果
- IntentService与Service用法区别
- android kl文件
- Android性能优化典范 - 第2季
- Android ANR产生原因和解决办法
- android中的任务栈和启动模式的总结
- Android之GridView横向左右滚动
- Android EventBus现实 听说你out该
- Android性能优化典范
- android服务的总结
- android DDMS 导出files文件夹下的容时报错
- 一个Android Socket的例子