Android自定义View - 自定义属性-灵析社区

chole

在Android自定义View中,自定义属性是一个重点。那么它有什么用呢?它被用来封装控件,兼容变化。我们开发好的自定义控件,通常不能完全满足别人的需求,比如颜色、文字大小不符合使用者的需求,这个时候我们就需要用到自定义属性了。

定义attrs.xml

<?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