原文地址 http://blog.csdn.net/lilu_leo/article/details/7449973

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

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

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <declare-styleable name="FlowIndicator">  
  4.         <attr name="count" format="integer" />  
  5.         <attr name="space" format="dimension" />  
  6.         <attr name="point_size" format="dimension" />  
  7.         <attr name="point_seleted_color" format="color|reference" />  
  8.         <attr name="point_normal_color" format="color|reference" />  
  9.         <attr name="point_radius" format="dimension" />  
  10.     declare-styleable>  
  11. resources>  

         首先,声明自定义,nameFlowIndicator,属性设置为比较简单的格式,前面参数name,后面是参数格式。

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

  • reference
  • string
  • color
  • dimension
  • boolean
  • integer
  • float
  • fraction
  • enum
  • flag

然后这样使用:

[java]  view plain copy
  1. public FlowIndicator(Context context, AttributeSet attrs) {  
  2.         super(context, attrs);  
  3.         //获得实例  
  4.         TypedArray typeArray = context.obtainStyledAttributes(attrs,  
  5.                 R.styleable.FlowIndicator);  
  6.         //从typeArray获取相应值,第二个参数为默认值,如第一个参数在atts.xml中没有定义,返回第二个参数值  
  7.         count = typeArray.getInteger(R.styleable.FlowIndicator_count, 4);  
  8.         space = typeArray.getDimension(R.styleable.FlowIndicator_space, 9);  
  9.         radius = typeArray.getDimension(R.styleable.FlowIndicator_point_radius, 9);  
  10.   
  11.         point_normal_color = typeArray.getColor(  
  12.                 R.styleable.FlowIndicator_point_normal_color, 0x000000);  
  13.         point_seleted_color = typeArray.getColor(  
  14.                 R.styleable.FlowIndicator_point_seleted_color, 0xffff07);  
  15.   
  16.         int sum = attrs.getAttributeCount();  
  17.         if (Constans.DEBUG) {  
  18.             String str = "";  
  19.             for (int i = 0; i < sum; i++) {  
  20.                 String name = attrs.getAttributeName(i);  
  21.                 String value = attrs.getAttributeValue(i);  
  22.                 str += "attr_name :" + name + ": " + value + "\n";  
  23.             }  
  24.             Log.i("attribute", str);  
  25.         }  
  26.         typeArray.recycle();  
  27.     }  


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

[java]  view plain copy
  1. Give back a previously retrieved StyledAttributes, for later re-use.  

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

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

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

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:app="http://schemas.android.com/apk/res/com.dream.myqiyi"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     android:orientation="vertical" >  
  7.         <com.dream.myqiyi.widget.FlowIndicator  
  8.             android:id="@+id/myView"  
  9.             android:layout_width="fill_parent"  
  10.             android:layout_height="wrap_content"  
  11.             android:layout_marginBottom="5dip"  
  12.             app:count="4"  
  13.             android:gravity="center"  
  14.             app:point_normal_color="#45000000"  
  15.             app:point_radius="3dip"  
  16.             app:point_seleted_color="#ffffff"  
  17.             app:point_size="5dip"  
  18.             app:space="10dip" />  
  19. FrameLayout>  

首先,要有声明:

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

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

[html]  view plain copy
  1. app:point_normal_color="#45000000"  
  2.            app:point_radius="3dip"  
  3.            app:point_seleted_color="#ffffff"  
  4.            app:point_size="5dip"  
  5.            app:space="10dip"  

更多相关文章

  1. android menu菜单
  2. Android(安卓)Camera 模块分析(三)
  3. android布局属性详解
  4. Android(安卓)属性总结
  5. Android(安卓)页面跳转(无/含有返回结果)
  6. ProgressBar进度条
  7. Android(安卓)Studio中图片的格式转换
  8. mybatisplus的坑 insert标签insert into select无参数问题的解决
  9. Python技巧匿名函数、回调函数和高阶函数

随机推荐

  1. Android(安卓)OpenGL ES(九):绘制线段Line
  2. Android最佳实践之:代码性能优化——Stric
  3. [置顶] Android应用程序签名
  4. Android将后台应用唤起到前台,唤醒APP;
  5. [置顶] Android camera子系统HAL层介绍集
  6. Android应用数字签名详解
  7. android桌面画面循环滑动
  8. Android(安卓)获取控件高度宽度三种方法
  9. Android App动态显示多个入口
  10. android java.net.UnknownHostException: