- 框架定义:
<declare-styleable name = "名称">
<attr name = "……" format = "……" />
</declare-styleable>
- color:颜色值,指定这个属性必须输入的是颜色值
<attr name = "textColor" format = "color" />
- boolean:布尔值,指定这个属性必须输入的是boolean类型(true/false)
<attr name = "focusable" format = "boolean" />
- dimension:尺寸值。注意,这里如果是dp那就会做像素转换为dip
<attr name = "layout_width" format = "dimension" />
- float:浮点值。
<attr name="degree" format="float"></attr>
- integer:整型值。
<attr name="startAngle" format="integer"></attr>
- string:字符串
<attr name="text" format="string"></attr>
- fraction:百分数。使用: android:pivotY = “300%”
<attr name = "pivotY" format = "fraction" />
- enum:枚举值,设置这个属性必须输入的值。比如style类型,就只能输入STROKE/FILL。在于代码链接的过程中就是传0/1
<attr name="style">
<enum name="STROKE" value="0"></enum>
<enum name="FILL" value="1"></enum>
</attr>
- flag:是自己定义的,类似于 android:gravity=“top”,就是里面对应了自己的属性值。
<attr name="weight">
<flag name="fat" value="0" />
<flag name="mid" value="1" />
<flag name="thin" value="2" />
</attr>
- reference|color:颜色的资源文件。
- reference|boolean:布尔值的资源文件
注意:由于reference是从资源文件中获取:所以在XML文件中写这个属性的时候必须 personattr:name="@string/app_name"这种格式,否则会出错
下面将代码和定义的xml文件联系起来
使用时候自定义命名空间
xmlns:app="http://schemas.android.com/apk/res-auto"
获取配置属性
TypedArray tArray = context.obtainStyledAttributes(attrs,R.styleable.PersonAttr);
自定义变量age,通过TypedArray 对象来获取xml中国的值。如果用户在使用该控件的时候有定义age属性的值,那么就得到用户定义的值,否则就用第二个参数作为默认值,即:如果没定义,那么默认为age = 15
int age = tArray.getInt(R.styleable.PersonAttr_age, 15);
小栗子
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="PersonAttr">
<attr name="name" format="reference" />
<attr name="sex" format="reference" />
<attr name="age" format="integer" />
<attr name="weight">
<flag name="fat" value="2" />
<flag name="mid" value="1" />
<flag name="thin" value="0" />
</attr>
<attr name="adult" format="boolean" />
<attr name="textSize" format="dimension" />
</declare-styleable>
</resources>
使用:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:personattr="http://schemas.android.com/apk/res/com.example.declare_styleable"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.example.declare_styleable.PersonView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
personattr:name="@string/person_name"
personattr:weight ="fat"
personattr:adult ="false"
personattr:textSize="@dimen/text_size"/>
</RelativeLayout>