自定义view是Android自定义控件的核心之一,那么在学习自定义view之前,我们先来了解下自定义view的自定义属性的attr的用法吧
(1)attr 的简单理解就是一个属性约束,约束具体属性字段的属性的数据类型(boolean、string、float…)
(2)attr的文件名称不是固定的,只是方便理解和规范,也可以是其他名称,比如arrt、aesa…
(3)其实我们经常在使用,比如我们界面的布局文件,从狭隘的方面理解只要用xml形式文件就涉及到约束,而attr就是其中的一种约束文件(类似Schema)而已
(4)如果要深入理解请大家去简单了解 XML DTD和XML Schema,这里就不带大家去理解了。
(5)这里给出两个参考网址:http://blog.chinaunix.net/uid-7308906-id-2059766.html ,http://blog.csdn.net/sunxing007/article/details/5684265
(1)attr 作用就是约束属性数据类型,xml资源文件中定义各种attr
,指定attr
的数据类型。
(1) 在自定义View的构造函数中解析这些从XML中定义的属性值,将其存放到View对应的成员变量中
(2) 在layout文件中为自定义View的XML属性赋值
(1)我们在res/values目录下新建了一个名为attrs_ysj.xml文件,文件名是什么不重要,只要是xml文件就行。
(2)我们在该文件中定义我们自定义View所支持的XML属性。
由图可知该文件的根结点是name
指定XML属性名称,通过format
指定XML属性值的类型,如下图所示:
当然为了方便理解format支持的数据类型,我在其他地方找了一张图片
由上图我们可知,format支持的类型有enum、boolean、color、dimension、flag、float、fraction、integer、reference、string。
按照以上的方法我们就可以定义好自己的属性以及相关的数据类型,接下来我们看看怎么简单的使用
首先要明确一点,attr
不依赖于styleable
,styleable
只是为了方便attr
的使用。我们可以直接在resources文件中定义一些属性,也可以自己定义属性放到styleable
里面。使用declare-styleable
的方式有利于我们我们把相关的属性组织起来,有一个分组的概念,属性的使用范围更加明确。
如果直接使用attr定义,
定义一个attr
就会在R文件里面生成一个Id,那么我们去获取这个属性时。那么获取我们自定义的相关属性的方式为:
int[] custom_attrs = {R.attr.viewText,R.viewTextColor,R.viewTextSize};
TypedArray typedArray = context.obtainStyledAttributes(set,custom_attrs);
如果自己定义属性放到styleable
里面如
通过定义一个
styleable
,我们可以在R文件里自动生成一个int[],数组里面的int就是定义在styleable
里面的attr
的id。所以我们在获取属性的时候就可以直接使用styleable
数组来获取一系列的属性。那么获取我们自定义的相关属性的方式为:
TypedArray typedArray = context.obtainStyledAttributes(set,R.styleable.YText);
由上面的例子可以知道,定义一个declare-styleable
,在获取属性的时候为我们自动提供了一个属性数组。此外,使用declare-styleable
的方式有利于我们我们把相关的属性组织起来,有一个分组的概念,属性的使用范围更加明确。
1. reference:参考某一资源ID。
(1)属性定义:
(2)属性使用:
android:layout_width = "42dip" android:layout_height = "42dip" android:background = "@drawable/图片ID" /> 2. color:颜色值。 (1)属性定义: (2)属性使用: android:layout_width = "42dip" android:layout_height = "42dip" android:textColor = "#00FF00" /> 3. boolean:布尔值。 (1)属性定义: (2)属性使用: