Android declare-styleable

2018-04-08  本文已影响0人  星空下奔跑

应用场景

当我们在自定义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"/>

上一篇下一篇

猜你喜欢

热点阅读