写个自定义控件时经常要自定义一些自己的属性,平时用的都是那几个,今天就顺便一起总结一下这个东东吧~

  一、定义:属性的定义都在attrs.xml文件里面;

  二、读取:通过都是通过TypedArray去读取的,要获取TypedArray都是通过context.obtainStyledAttributes去获取的,它有几个重载方法,一般形如: TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CustomView);

  三、使用:要使用自定义属性,得先在布局文件声明 xmlns:app="http://schemas.android.com/apk/res-auto" 当然,你不喜欢app也可以自定义名字,形如:xmlns:custom="http://schemas.android.com/apk/res/{packagename}" 

  四、自定义format的概览:

format名称 format类型
reference
表示引用,参考某一资源ID
string
表示字符串
color
表示颜色值
boolean
表示尺寸值
dimension
表示布尔值
float
表示浮点值
integer
表示整型值
fraction
表示百分数
enum
表示枚举值
flag
表示位运算

  五、具体说明:

  5.1. reference:参考某一资源ID。

(1)属性定义:

<declare-styleable name = "名称">

<attr name = "cutom_id" format = "reference" />

</declare-styleable>

(2)属性使用:

<CustomView

android:layout_width = "wrap_content"
                     android:layout_height = "wrap_content"
                     app:cutom_id = "@drawable/图片ID"

/>

  5.2. color:颜色值。

(1)属性定义:

<declare-styleable name = "名称">

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

</declare-styleable>

(2)属性使用:

<CustomView

android:layout_width = "wrap_content"
                     android:layout_height = "wrap_content"
                     app:custom_color = "#00FF00"

/>

  5.3. boolean:布尔值。

(1)属性定义:

<declare-styleable name = "名称">

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

</declare-styleable>

(2)属性使用:

<CustomView

android:layout_width = "wrap_content"
                    android:layout_height = "wrap_content"

app:custom_b = "true"

/>

  5.4. dimension:尺寸值。

(1)属性定义:

<declare-styleable name = "名称">

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

</declare-styleable>

(2)属性使用:

<CustomView

android:layout_width = "wrap_content"
                    android:layout_height = "wrap_content"

       app:custom_width="44dp"

/>

  5.5. float:浮点值。

(1)属性定义:

<declare-styleable name = "名称">

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

</declare-styleable>

(2)属性使用:

<CustomView
              android:layout_width = "wrap_content"

 android:layout_height = "wrap_content"

       app:custom_alpha="0.5"

/>

  5.6. integer:整型值。

(1)属性定义:

<declare-styleable name = "名称">

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

</declare-styleable>

(2)属性使用:

<CustomView

       android:layout_width = "wrap_content"

  android:layout_height = "wrap_content"

       app:custom_number="5"

/>

  5.7. string:字符串。

(1)属性定义:

<declare-styleable name = "名称">
                   <attr name = "custom_key" format = "string" />
            </declare-styleable>

(2)属性使用:

<CustomView
                    android:layout_width = "wrap_content"
                    android:layout_height = "wrap_content"
                    app:custom_key = "test_msg"

/>

  5.8. fraction:百分数。

(1)属性定义:

<declare-styleable name="名称">
                   <attr name = "custom_percent" format = "fraction" />
            </declare-styleable>

(2)属性使用:

<CustomView

android:layout_width = "wrap_content"
                 android:layout_height = "wrap_content"

app:custom_percent = "200%"

/>

  5.9. enum:枚举值。

(1)属性定义:

<declare-styleable name="名称">
                   <attr name="custom_orientation">
                          <enum name="horizontal" value="0" />
                          <enum name="vertical" value="1" />
                   </attr>

</declare-styleable>

(2)属性使用:

<CustomView

android:layout_width = "wrap_content"
                    android:layout_height = "wrap_content"

app:custom_orientation = "vertical"
            />

  5.10. flag:位或运算。

(1)属性定义:

<declare-styleable name="名称">
                    <attr name="custom_mode">
                            <flag name = "mode_one" value = "0" />
                            <flag name = "mode_two" value = "1" />
                            <flag name = "mode_three" value = "2" />
                     </attr>

</declare-styleable>

(2)属性使用:

<CustomView

android:layout_width = "wrap_content"
                    android:layout_height = "wrap_content"

app:custom_mode = "mode_one|mode_two|mode_three"
            />

  5.11 注意: 属性定义时可以指定多种类型值。

    (1)属性定义:

<declare-styleable name = "名称">

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

</declare-styleable>

(2)属性使用:

<CustomView

android:layout_width = "wrap_content"
                     android:layout_height = "wrap_content"
                     app:custom_background = "@drawable/图片ID|#00FF00"

/>

关于Android attrs 自定义属性的说明的更多相关文章

  1. Android中自定义属性(attrs.xml,TypedArray的使用)

    做Android布局是件很享受的事,这得益于他良好的xml方式.使用xml可以快速有效的为软件定义界面.可是有时候我们总感觉官方定义的一些基本组件不够用,自定义组件就不可避免了.那么如何才能做到像官方 ...

  2. android开发:Android 中自定义属性(attr.xml,TypedArray)的使用

    今天我们的教程是根据前面一节扩展进行的,如果你没有看,请点击 Android高手进阶教程(三)查看第三课,这样跟容易方便你的理解! 在xml 文件里定义控件的属性,我们已经习惯了android:att ...

  3. Android之自定义属性

    有些时候会觉得Android中提供的控件不能满足项目的要求,所以就会常常去自定义控件.自定义控件就不免会自定义属性.自定义属性大致需要三个步骤:在XML文件中定义自定义属性的名称和数据类型.在布局中调 ...

  4. Android中自定义属性的使用

    做Android布局是件很享受的事,这得益于他良好的xml方式.使用xml可以快速有效的为软件定义界面.可是有时候我们总感觉官方定义的一些基本组件不够用,自定义组件就不可避免了.那么如何才能做到像官方 ...

  5. Android attrs.xml文件中属性类型format值的格式

    "reference" //引用 "color" //颜色 "boolean" //布尔值 "dimension" // ...

  6. Android中自定义属性attr.xml的格式详解

    1. reference:参考某一资源ID.     (1)属性定义:             <declare-styleable name = "名称">      ...

  7. Android 自定义属性(attrs.xml,TypedArray)

    做Android布局是件很享受的事,这得益于他良好的xml方式.使用xml可以快速有效的为软件定义界面.可是有时候我们总感觉官方定义的一些基本组 件不够用,自定义组件就不可避免了.那么如何才能做到像官 ...

  8. Android学习笔记_49_Android中自定义属性(attrs.xml,TypedArray的使用)

    做Android布局是件很享受的事,这得益于他良好的xml方式.使用xml可以快速有效的为软件定义界面.可是有时候我们总感觉官方定义的一些基本组件不够用,自定义组件就不可避免了.那么如何才能做到像官方 ...

  9. [置顶] xamarin android自定义标题栏(自定义属性、回调事件)

    自定义控件的基本要求 这篇文章就当是自定义控件入门,看了几篇android关于自定义控件的文章,了解了一下,android自定义控件主要有3种方式: 自绘控件:继承View类,所展示的内容在OnDra ...

随机推荐

  1. JavaScript命名整理

    .container { width: 720px; background: #fafafa; border: 2px dashed #999; padding: 10px; float: left ...

  2. 5. 跟踪标记 (Trace Flag) 834, 845 对内存页行为的影响

    跟踪标记:834 功能: 在64位的windows环境下,为SQL Server开启这个跟踪标记,那么SQL Server 会使用大页(Large pages)为内存缓冲区(buffer pool)分 ...

  3. SpringMvc文件资源防止被外链链接

    /** * 文件下载防止文件被别的网站引用 * 直接访问会访问不了 * @Description: * @param type * 文件后缀名 * @param fileName * 文件名 * @p ...

  4. 简单了解下OSI七层模型的作用以及常见网络协议含义和所用端口

    OSI七层模型及每层的作用 包括:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层物理层用来建立.维护.断开物理连接数据链路层建立逻辑链接.进行硬件地址寻址.差错校验等功能网络层进行逻辑地址 ...

  5. python实现汉诺塔移动

    汉诺塔问题 汉诺塔是根据一个传说形成的一个问题.汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大 ...

  6. HDU - 2154 线性dp

    思路:0表示A,1表示B,2表示C,d(i, j)表示在第j次时正好到达i. AC代码 #include <cstdio> #include <cmath> #include ...

  7. Shiro登录成功之后跳到指定URL

    通常我们使用shiro,登录之后就会跳到我们上一次访问的URL,如果我们是直接访问登录页面的话,shiro就会根据我们配置的successUrl去重定向,如果我们没有配置successUrl的话,那么 ...

  8. Mybatis入门1

    关于Mybatis的快速入门可以分为这样几步: 1.引入依赖或者引入jar包 2.编写全局配置文件(Mybatis-config.xml) <?xml version="1.0&quo ...

  9. 获得某个月的天数(java, mysql, oracle)

    java方式: Calendar   cal   =   Calendar.getInstance(); cal.set(Calendar.YEAR,year); cal.set(Calendar.M ...

  10. 关于instrinsicContentSize, ContentHuggingPriority, ContentcompressionResistancePriority的理解

    ios 关于intrinsic理解 最近由于项目的需要想给MBProgressHUD添加一个自定义的view, 结果花费了一两个小时也没添加上去,添加上去的view没有实际的大小,即使你给他设置了一个 ...