在Android自定义View中,自定义属性是一个重点。那么它有什么用呢?它被用来封装控件,兼容变化。我们开发好的自定义控件,通常不能完全满足别人的需求,比如颜色、文字大小不符合使用者的需求,这个时候我们就需要用到自定义属性了。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyView">
<attr name="dora_background" format="color|reference"/>
</declare-styleable>
</resources>
通过定义declare-styleable节点来定义属性,name是自定义属性的名字,format是该属性的数据类型,reference为引用类型,比如可以指定@string/和@color/这样的值。
我们一起来看看都有哪些format的类型吧。
string:字符串 dimension:尺寸 color:颜色 integer:整数 float:小数 fraction:分数 flags:位运算 enum:枚举 boolean:布尔值 reference:引用
代码中读取自定义属性,都是通过TypedArray。
TypedArray ta = context.obtainStyledAttributes();
ta.recycle();
重要的事情说三遍,一定要回收,一定要回收,一定要回收。
读取字符串
ta.getString();
读取尺寸
ta.getDimension();//返回float类型的尺寸
ta.getDimensionPixelOffset();//返回int类型的尺寸,舍弃小数位,通常使用在有正负且对称的点的距离的长度
ta.getDimensionPixelSize();//返回int类型的尺寸,四舍五入,通常使用在不考虑位置偏移等因素的,如仅仅是控件中某个元素的宽度和高度
读取颜色
ta.getColor();
ta.getColorStateList();
读取整数
ta.getInteger();
读取小数
ta.getFloat();
读取分数
ta.getFraction();
分为指定10%和10%p两种情况,其中有base和pbase两个参数,base对应的就是对应的10%,而pbase就是对应的10%p。这两个参数不会同时生效。base和pbase都是读取时的放大倍数,且一般都是设置为1。如果你设置10%,base为10,那么得到的结果就是1左右。而如果你设置10%p,pbase为5,那么得到的结果为0.5左右。
多种组合
<attr name="property" format="flags">
<flag name="center" value="0" />
<flag name="centerVertical" value="1" />
<flag name="centerHorizontal" value="2" />
<flag name="left" value="3" />
<flag name="top" value="4" />
<flag name="right" value="5" />
<flag name="bottom" value="6" />
</attr>
以上为flags类型的定义方式。通过|来分隔多个传入的值。
ta.getInt();
枚举
<attr name="fruit" format="enum">
<enum name="apple" value="0" />
<enum name="banana" value="1" />
<enum name="watermelon" value="2" />
<enum name="orange" value="3" />
<enum name="pineapple" value="4" />
</attr>
以上为enum类型的定义方式。
ta.getInt();
布尔值
ta.getBoolean();
引用
ta.getResourceId();
ta.getDrawable();
ta.getTextArray();
根据具体情况选择方法。
阅读量:1491
点赞量:0
收藏量:0