您的位置:首页 > 移动开发 > Android开发

android自定义视图属性(atts.xml,TypedArray)学习

2015-01-22 11:23 399 查看
是一个用于存放恢复obtainStyledAttributes(, int, int)]AttributeSet, int[], int, int)或
)]obtainAttributes(AttributeSet, int[])
值的一个数组容器,当操作完成以后,一定要调用recycle()方法。用于检索的索引值在这个结构对应的位置给obtainStyledAttributes属性。

使用这个类的时候,先要在valuse文件夹下创建:atts.xml文件:

[html] view plaincopy

<?xml version="1.0" encoding="utf-8"?>

<resources>

<declare-styleable name="FlowIndicator">

<attr name="count" format="integer" />

<attr name="space" format="dimension" />

<attr name="point_size" format="dimension" />

<attr name="point_seleted_color" format="color|reference" />

<attr name="point_normal_color" format="color|reference" />

<attr name="point_radius" format="dimension" />

</declare-styleable>

</resources>

首先,声明自定义<declare-styleable name="FlowIndicator">,nameFlowIndicator,属性设置为比较简单的格式,前面参数name,后面是参数格式。

自定义属性的format,可以有以下多种:

reference

string

color

dimension

boolean

integer

float

fraction

enum

flag

然后这样使用:

[java] view plaincopy

public FlowIndicator(Context context, AttributeSet attrs) {

super(context, attrs);

//获得实例

TypedArray typeArray = context.obtainStyledAttributes(attrs,

R.styleable.FlowIndicator);

//从typeArray获取相应值,第二个参数为默认值,如第一个参数在atts.xml中没有定义,返回第二个参数值

count = typeArray.getInteger(R.styleable.FlowIndicator_count, 4);

space = typeArray.getDimension(R.styleable.FlowIndicator_space, 9);

radius = typeArray.getDimension(R.styleable.FlowIndicator_point_radius, 9);

point_normal_color = typeArray.getColor(

R.styleable.FlowIndicator_point_normal_color, 0x000000);

point_seleted_color = typeArray.getColor(

R.styleable.FlowIndicator_point_seleted_color, 0xffff07);

int sum = attrs.getAttributeCount();

if (Constans.DEBUG) {

String str = "";

for (int i = 0; i < sum; i++) {

String name = attrs.getAttributeName(i);

String value = attrs.getAttributeValue(i);

str += "attr_name :" + name + ": " + value + "\n";

}

Log.i("attribute", str);

}

typeArray.recycle();

}

最后一定不要忘记typeArray.recycle():

[java] view plaincopy

Give back a previously retrieved StyledAttributes, for later re-use.

给回以前提取的styledattributes,以后再使用。

应该注意到,获取属性的时候所用的R.styleable.FlowIndicator_count中的FlowIndicator_count是采取的名字_属性这种格式。

定义好了自定义属性,就可以在自定控件中的属性设置了:

[html] view plaincopy

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res/com.dream.myqiyi"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<com.dream.myqiyi.widget.FlowIndicator

android:id="@+id/myView"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_marginBottom="5dip"

app:count="4"

android:gravity="center"

app:point_normal_color="#45000000"

app:point_radius="3dip"

app:point_seleted_color="#ffffff"

app:point_size="5dip"

app:space="10dip" />

</FrameLayout>

首先,要有声明:

xmlns:app="http://schemas.android.com/apk/res/com.dream.myqiyi",“com.dream.myqiyi”这个是你项目的包名。

然后我们就可以使用app:这样设置自定义的属性了。

[html] view plaincopy

app:point_normal_color="#45000000"

app:point_radius="3dip"

app:point_seleted_color="#ffffff"

app:point_size="5dip"

app:space="10dip"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐