Android declare-styleable
应用场景
当我们在自定义View/ViewGroup需要在自己的View上添加新的属性并且需要在编辑xml里就能定义时,就需要在resources中定义好相对应的declare-styleable。
格式
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="SwipeLayout" >
<attr name="enableRefresh" format="boolean" />
<attr name="enableLoadmore" format="boolean" />
<attr name="scrollingVelocity" format="integer" />
<attr name="useDefaultHeaderAndFooter" format="boolean" />
<attr name="dragEffect" format="integer" />
</declare-styleable>
</resources>
运用
在调用自定义自定义属性时就像下面这样:
<?xml version="1.0" encoding="utf-8"?>
<SwipeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:enableRefresh="true"
>
<...>
<...>
</SwipeLayout>
代码
然后在代码中读取这些属性时:
TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.SwipeLayout);
enableRefresh = a.getBoolean(R.styleable.SwipeLayout_enableRefresh, true);
a.recycle();
支持的类型
每个attr的format有如下几种类型:
integer、boolean、float、color、string、dimension、flag、enum、fraction、refrence
1、integer顾名思义就是整数值
2、boolean是true或者false
3、float就是浮点类型
4、color的话就是#+RGB/RGBA编码的格式如:#eeeeee00
5、string可以使字符串也可以是一个字符串资源
6、dimension如:100dip
7、flag位运算
<attr name="windowSoftInputMode">
<flag name="stateUnspecified" value="1" />
<flag name = "adjustNothing" value = "0x30" />
</attr>
8、enum枚举类型
<attr name="language">
<enum name="English" value="1"/>
<enum name="Chinese" value="2"/>
</attr>
9、fraction百分数
10、refrence资源的引用,可以是各种资源如layout,color,string
另外,在定义可以指定多种format如:
<attr name="background" format="reference|color" />
使用:
<ImageView android:background = "@drawable/图片ID|#00FF00"/>