HardBirch

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

时间:12-04-11 栏目:安卓源码解析与小应用 作者:张飞不张,文采横飞 评论:0 点击: 2,575 次

       最近在学习过程中遇到这个问题,不知道TypedArray是干嘛用的?去官方网站看一下吧:TypedArray继承自Object类,然后再看下它的类概述:

Container for an array of values that were retrieved with obtainStyledAttributes(AttributeSet, int[], int, int) or obtainAttributes(AttributeSet, int[]). Be sure to call recycle() when done with them. The indices used to retrieve values from this structure correspond to the positions of the attributes given to obtainStyledAttributes.

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

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

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

然后这样使用:

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():

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

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

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

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

<?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:这样设置自定义的属性了。

 app:point_normal_color="#45000000"
            app:point_radius="3dip"
            app:point_seleted_color="#ffffff"
            app:point_size="5dip"
            app:space="10dip"

先简单的写到这吧,如果问题,欢迎探讨。


声明: 本文由( 张飞不张,文采横飞 )原创编译,转载请保留链接: android自定义视图属性(atts.xml,TypedArray)学习

android自定义视图属性(atts.xml,TypedArray)学习:等您坐沙发呢!

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐