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. Git(一)Git的简介安装

    一.git历史 同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代.Linux 内核开源项目有着为数众广的参与者.绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐 ...

  2. 数学之美——HMM模型(二)解码和Forward算法

    上一篇讨论了HMM的基本概念和一些性质,HMM在现实中还是比较常见的,因此也带来一了一系列的HMM应用问题.HMM应用主要面向三个方面:预测.解码和学习.这篇主要讨论预测. 简单来说,预测就是给定HM ...

  3. MongoDB 安全配置

    前言 随着MongoDB使用人群企业越来越广泛,黑客的注意力也转移到了其中.比如去年很火热的MongoDB劫持事件,很多人对MongoDB的安全也越来越重视.今天,我们就简单总结一些MongoDB的安 ...

  4. 使用SOCKET获取网页的内容

    使用fsockopen()函数来实现获取页面信息,完整代码如下 //设置字符集(由于要抓取的网易网站字符集编码是gbk编码) header("content-type:text/html;c ...

  5. PowerShell 中使用 mvn 编译报错 Unknown lifecycle phase ".test.skip=true". 解决办法

    nknown lifecycle phase “–Dmaven.test.skip=true”. You must specify a valid lifecycle phase or a goal ...

  6. Windows 下 MySql 5.7.20安装及data和my.ini文件的配置(转)

    Windows 下 MySql 5.7.20安装及data和my.ini文件的配置     本文通过图文并茂的形式给大家介绍了MySql 5.7.20安装及data和my.ini文件的配置方法. my ...

  7. 多线程十之CopyOnWriteArrayList源码分析

    目录 简介 类结构 源码解析 构造方法 add(E e) add(int index, E element) get(int index) remove(int index) 迭代器Iterator遍 ...

  8. HTTPS分析-简单易懂

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  9. android 调试Installation failed with message INSTALL_FAILED_USER_RESTRICTED: Install canceled by user.

    真机调试 遇到的问题 在使用真机调试的程序的时候出现了这个问题. 解决方法如下

  10. 膨胀卷积与IDCNN

    Dilation 卷积,也被称为:空洞卷积.膨胀卷积. 一.一般的卷积操作: 首先,可以通过动态图,理解正常卷积的过程: 如上图,可以看到卷积操作. 对于CNN结构,通常包括如下部分: 输入层 (in ...