android自定义视图属性(atts.xml,TypedArray)学习
是一个用于存放恢复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自定义视图一:扩展现有的视图,添加新的XML属性
这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...
- Android自定义视图教程
Android自定义视图教程 Android的UI元素都是基于View(屏幕中单个元素)和ViewGroup(元素的集合),Android有许多自带的组件和布局,比如Button.TextView.R ...
- Android自定义视图四:定制onMeasure强制显示为方形
这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...
- Android自定义视图三:给自定义视图添加“流畅”的动画
这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...
- Android自定义视图二:如何绘制内容
这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...
- 【转】ANDROID自定义视图——onLayout源码 流程 思路详解
转载(http://blog.csdn.net/a396901990) 简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onMeasure():决定View的大小 2.布局 ...
- 【转】ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解
原文地址:http://blog.csdn.net/a396901990/article/details/36475213 简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量—— ...
- ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解
简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量--onMeasure():决定View的大小 2.布局--onLayout():决定View在ViewGroup中的位置 3. ...
- Android开发UI之自定义视图属性
Android框架中,所有自定义的view类都继承自View,也可以继承Button等view的子类 为了允许ADT能够与view交互,必须提供一个能够获取Context和作为属性的Attribute ...
随机推荐
- Smarty的模板中不允许PHP的代码?
/****************************************************************************** * Smarty的模板中不允许PHP的代 ...
- centos7 node express项目 将http接口升级为https接口的解决方法
1.将对应的ssl证书放到项目文件中(我装的镜像是oneinstack的,创建项目时可以直接选择生成ssl证书的项目,即 xxx.key 和 xxx.crt 文件): 2.修改bin/www文件,修改 ...
- DCOS安装
安装pre-flight master机器会安装上安装文件(同时check条件是否满足要求),其他的agent设备只是check各种条件是否具备. 确保53/2181端口没有被占用:centos7每次 ...
- Java编程思想第七章复用类
7.1组合语法 在一个类中引入多个对象,以提高代码的复用性与功能. 7.2继承语法 使用继承子类可以获得,导出类可以获得基类的成员(变量与方法). 注:这里注意权限控制,若基类中的成员为默认权限,只有 ...
- 基于微服务的父maven依赖
<dependencies> <!-- spring-boot核心 --> <dependency> <groupId>org.springframew ...
- Python 函数之迭代器和生成器
1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可 ...
- [转载]PCI/PCIe基础——配置空间
转载地址:http://blog.csdn.net/jiangwei0512/article/details/51603525 PCI/PCIe设备有自己的独立地址空间,这部分空间会映射到整个系统的地 ...
- TCP和UDP数据包大小限制
1.概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层. 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Da ...
- SQL基础(2)
SQL TOP (1)TOP子句 OP 子句用于规定要返回的记录的数目. 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. 注释:并非所有的数据库系统都支持 TOP 子句. (2)SQL S ...
- MPEG-PS封装格式
据传输媒体的质量不同,MPEG-2中定义了两种复合信息流:传送流(TS:TransportStream)和节目流(PS:ProgramStream) PS文件分为3层:ps层(Program Stre ...