Android自定义View-自定义属性

介绍

自定义View的自定义属性,为了能让自定义View在xml文件中编写时可以设置自己特有的属性。用代码写界面不需要自定义属性。

声明自定义属性

创建attrs.xml文件

在res/values/中创建一个attrs.xml。

创建declare-styleable节点

在根节点resources内添加declare-styleable节点,declare-styleable节点只有一个name属性且为必填,name可以自由定义。


<resources>
    <declare-styleable name="CustomView">
    declare-styleable>
resources>

declare-styleable节点会在R.styleable中生成常量名为name的值的int数组常量,用于后面获取自定义属性时从属性集合里获取出只在declare-styleable节点里的attr的TypedArray。

public static final int[] CustomView = {
};

创建attr节点(声明自定义属性)

attr节点有两个属性name和format,其中name为必填可以自由定义,format用于规定自定义属性的值的类型,有10种类型。
format的8种类型和对应的声明和赋值例子:

format类型 声明例子 赋值例子
boolean
integer
float
dimension(dp、px等)
string
fraction(nn%p)
reference(@)
color(#)

format可以同时定义成多个类型,用 | 分隔。像上面的color。

还有两种类型,enum(枚举)和flag(位或)。
attr节点有两种子节点,enum和flag,enum和flag不能同时使用。
enum可在format声明,也可以不声明,当attr节点内有enum节点时,attr可以赋值为enum。
flag不可在format声明,当attr节点内有flag节点时,attr可以赋值为flag。

enum子节点的声明,value的值只能是int类型

"layout_width" format="dimension">
    <enum name="fill_parent" value="-1" />
    <enum name="match_parent" value="-1" />
    <enum name="wrap_content" value="-2" />

enum子节点使用:只能使用其中一个值

<view android:layout_width="wrap_content" />
<view android:layout_width="match_parent" />
<view android:layout_width="30dp" />

flag子节点的声明,value的值只能是int类型

<attr name="gravity">
    <flag name="top" value="0x30" />
    <flag name="bottom" value="0x50" />
    <flag name="left" value="0x03" />
    

你可能感兴趣的:(Android自定义View-自定义属性)