1. 框架定义:

<declare-styleable name = "名称">

  <attr name = "……" format = "……" />

</declare-styleable>

2. color:颜色值,指定这个属性必须输入的是颜色值

<attr name = "textColor" format = "color" />

3. boolean:布尔值,指定这个属性必须输入的是boolean类型(true/false)

<attr name = "focusable" format = "boolean" />

4. dimension:尺寸值。注意,这里如果是dp那就会做像素转换为dip

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

5. float:浮点值。

<attr name="degree" format="float"></attr>

6. integer:整型值。

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

7. string:字符串

<attr name="text" format="string"></attr>

8. fraction:百分数。使用: android:pivotY = "300%"

<attr name = "pivotY" format = "fraction" />

9. enum:枚举值,设置这个属性必须输入的值。比如style类型,就只能输入STROKE/FILL。在于代码链接的过程中就是传0/1

<attr name="style">
  <enum name="STROKE" value="0"></enum>
  <enum name="FILL" value="1"></enum>
</attr>

10. flag:是自己定义的,类似于 android:gravity="top",就是里面对应了自己的属性值。

<attr name="weight">

  <flag name="fat" value="0" />

  <flag name="mid" value="1" />

  <flag name="thin" value="2" />

</attr>

11. reference|color:颜色的资源文件。

12.reference|boolean:布尔值的资源文件

注意:由于reference是从资源文件中获取:所以在XML文件中写这个属性的时候必须 personattr:name="@string/app_name"这种格式,否则会出错

属性定义时可以指定多种类型值。

(1)属性定义:

<declare-styleable name = "名称">

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

</declare-styleable>

(2)属性使用:

<ImageView

android:layout_width = "42dip"
                     android:layout_height = "42dip"
                     android:background = "@drawable/图片ID|#00FF00" />

下面将代码和定义的xml文件联系起来

TypedArray tArray = context.obtainStyledAttributes(attrs,R.styleable.PersonAttr);//获取配置属性

自定义变量age,通过TypedArray 对象来获取xml中国的值。如果用户在使用该控件的时候有定义age属性的值,那么就得到用户定义的值,否则就用第二个参数作为默认值,即:如果没定义,那么默认为age = 15

int age = tArray.getInt(R.styleable.PersonAttr_age, 15);

使用前,需要在该控件或者是他的父控件中声明命名空间:

xmlns:personattr="http://schemas.android.com/apk/res/com.example.declare_styleable"

xmlns:自定义的空间名="http://schemas.android.com/apk/res/自定义视图类所在项目的包名"

比如自定义的类叫Rotate,包名是com.example.declare_styleable,那么就按如下方式来使用该控件

<com.example.declare_styleable.Rotate

xmlns:pt = "http://schemas.android.com/apk/res/com.example.declare_styleable" 
               pt:interpolator = "@anim/动画ID"

pt:fromDegrees = "0" 
               pt:toDegrees = "360"

pt:pivotX = "200%"

pt:pivotY = "300%" 
               pt:duration = "5000"  />

小例子:

attrs.xml(定义)

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="PersonAttr">
<attr name="name" format="reference" />
<attr name="sex" format="reference" />
<attr name="age" format="integer" />
<attr name="weight">
<flag name="fat" value="2" />
<flag name="mid" value="1" />
<flag name="thin" value="0" />
</attr>
<attr name="adult" format="boolean" />
<attr name="textSize" format="dimension" />
</declare-styleable>
</resources>

layout.xml(使用)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:personattr="http://schemas.android.com/apk/res/com.example.declare_styleable"

android:layout_width="match_parent"
android:layout_height="match_parent" > <com.example.declare_styleable.PersonView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
personattr:name="@string/person_name"
personattr:weight ="fat"
personattr:adult ="false"
personattr:textSize="@dimen/text_size"/> </RelativeLayout>

attrs.xml中declare-styleable 详解(用于自定义控件的属性)的更多相关文章

  1. Android中attrs.xml文件的使用详解

    $*********************************************************************************************$ 博主推荐 ...

  2. Spring中,applicationContext.xml 配置文件在web.xml中的配置详解

    一.首先写一下代码结构. 二.再看web.xml中的配置情况. <?xml version="1.0" encoding="UTF-8"?> < ...

  3. Logback初始化失败问题排查(Web.xml中context-param配置详解)

    监控部分反馈异常,生产系统日志文件竟然木有了(最后一次版本发布后,再也无日志文件生成). 问题排查步骤: 1. 检查logback配置文件 日志生成目录一切正常 应该服务器上磁盘空间未满.操作权限没有 ...

  4. struts2.xml中所有constant详解--大全

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-/ ...

  5. java中的注解详解和自定义注解

    一.java中的注解详解 1.什么是注解 用一个词就可以描述注解,那就是元数据,即一种描述数据的数据.所以,可以说注解就是源代码的元数据.比如,下面这段代码: @Override public Str ...

  6. spring在IoC容器中装配Bean详解

    1.Spring配置概述 1.1.概述 Spring容器从xml配置.java注解.spring注解中读取bean配置信息,形成bean定义注册表: 根据bean定义注册表实例化bean: 将bean ...

  7. Java中日志组件详解

    avalon-logkit Java中日志组件详解 lanhy 发布于 2020-9-1 11:35 224浏览 0收藏 作为开发人员,我相信您对日志记录工具并不陌生. Java还具有功能强大且功能强 ...

  8. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  9. AngularJS select中ngOptions用法详解

    AngularJS select中ngOptions用法详解   一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...

  10. 【转载】C/C++中extern关键字详解

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

随机推荐

  1. (转载)How browsers work--Behind the scenes of modern web browsers (前端必读)

    浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工 作原理,我们将看到,从你在地址栏输入google.com到你看到google主页过程中都发生了什么. 将讨论的浏览器 今天,有五种主流浏览器— ...

  2. P1540 机器翻译 模拟

    题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...

  3. HDU4267 树状数组

    题意描述: 给定一个数组,有两种操作: 操作一:a b k c 对于区间a~b之间的元素如果下标满足(i-a)%k=0则给元素i加上c 操作二:a          查询下标为a的元素当前值 解题思路 ...

  4. 文件上传按钮input[type="file"]按钮美化时在IE8中的bug【兼容至IE8】

    首先看一下完成后的效果,鼠标移入可改变为手指的效果. 在此就不加图标了 <label class="file-upload"> <span>上传附件< ...

  5. UML用例图之间的关系

    在画用例图的时候,理清用例之间的关系是重点.用例的关系有泛化(generalization).扩展(extend)和包含(include).其中include和extend最易混淆.下面我们结合实例彻 ...

  6. MyBatis 从浅入深 随笔整理

    MyBatis? archetypeCatalog = internal 本文档单独出现的_parameter都标识为变量名 一.三个基本要素: 核心接口和类 MyBatis 核心配置文件 SQL映射 ...

  7. Linux驱动之混杂设备(misc)

    字符设备之混杂设备: 定义混杂设备: struct misdevice{ int minor; //为什么这里只有次设备号,因为混杂设备是一种在 /////////////////////////Li ...

  8. python之sys.stdout、sys.stdin

    转自:http://www.cnblogs.com/turtle-fly/p/3280519.html 本文环境:Python 2.7  使用 print obj 而非 print(obj) sys. ...

  9. 【原】getInputStream()与getParameterMap()获得Post请求的数据区别

    [前言] 最近在写一个接口,写好以后想测试,自己写ajax(Post方法)来调用接口倒是可以用action所在类的属性的get/set方法获得数据.但是不只是页面的ajax会调用这个接口,还有外系统会 ...

  10. android防止按钮连续点击方案之AOP

    转载请标明出处http://www.cnblogs.com/yxx123/p/6675567.html 防止连续点击的实现方式有很多种,比如,在所有的onclick里面加上防多次点击的代码,或者定义一 ...