博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android自定义属性
阅读量:5989 次
发布时间:2019-06-20

本文共 2193 字,大约阅读时间需要 7 分钟。

上一篇讲解了Android自定义View,这篇来讲解一下Android自定义属性的使用,让你get新技能.希望我的分享能帮助到大家.

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

1、在res/values文件下定义一个attrs.xml文件,代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <resources>   
  3.     <declare-styleable name="numText">  
  4.         <attr name="numLine" format="integer"/>   
  5.         <attr name="textview_scroll" format="boolean"></attr>  
  6.     </declare-styleable>   
  7. </resources>  

2、在布局xml中如下使用该属性:

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     xmlns:nl="http://schemas.android.com/apk/res/com.example.myview"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent">  
  6.   
  7.     <com.example.myview.LogicView  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="match_parent"  
  10.         nl:numLine="5"  
  11.         nl:textview_scroll="true"/>  
  12.   
  13. </RelativeLayout>  

3、在自定义组件中,可以如下获得xml中定义的值:

  1. //获取自定义属性的值  
  2. TypedArray typedArray=context.obtainStyledAttributes(attrs, R.styleable.numText);  
  3. numLine=typedArray.getInt(R.styleable.numText_numLine, 1);  
  4. textviewScroll=typedArray.getBoolean(R.styleable.numText_textview_scroll, true);  
  5. typedArray.recycle();  
就这么简单的三步,即可完成对自定义属性的使用,
好了,基本用法已经讲完了,现在来看看一些注意点和知识点吧。

4. 首先来看看attrs.xml文件。

该文件是定义属性名和格式的地方,需要用<declare-styleable name="numText"></declare-styleable>包围所有属性。其中name为该属性集的名字,主要用途是标识该属性集。那在什么地方会用到呢?主要是在第三步。看到没?在获取某属性标识时,用到"R.styleable.numText_numLine",很显然,他在每个属性前面都加了"numText_"。

5.在来看看各种属性都有些什么类型吧:string , integer , dimension , reference , color , enum.

前面几种的声明方式都是一致的,例如:<attr name="numLine" format="integer"/>。 

只有enum是不同的,用法举例:

如果该属性可同时传两种不同的属性,则可以用“|”分割开即可。

6.让我们再来看看布局xml中需要注意的事项。首先得声明一下:xmlns:nl=http://schemas.android.com/apk/res/com.example.myview

注意,“nl”可以换成其他的任何名字,后面的url地址必须最后一部分必须用上自定义组件的包名。自定义属性了,在属性名前加上“nl”即可。

7.最后来看看java代码中的注意事项。在自定义组件的构造函数中,用

  1. TypedArray typedArray=context.obtainStyledAttributes(attrs, R.styleable.numText);  

来获得对属性集的引用,然后就可以用“a”的各种方法来获取相应的属性值了。这里需要注意的是,如果使用的方法和获取值的类型不对的话,则会返回默认值。因此,如果一个属性是带两个及以上不用类型的属性,需要做多次判断,知道读取完毕后才能判断应该赋予何值。当然,在取完值的时候别忘了回收资源哦!

效果图跟我上一篇自定义View的一样,我是在那个基础上进行修改的

我参考的博客链接:http://www.cnblogs.com/ufocdy/archive/2011/05/27/2060221.html

你可能感兴趣的文章
Java目录
查看>>
23种设计模式
查看>>
超大 Cookie 拒绝服务攻击
查看>>
在Eclipse添加Android兼容包( v4、v7 appcompat )
查看>>
国内PaaS概述和EEPlat定位
查看>>
Android Fragement学习笔记(三)----PreferenceFragment使用
查看>>
简单介绍一下线程池和数据库连接池的原理
查看>>
Nim教程【九】
查看>>
Non Lasting Storage File System、procfs、sysfs
查看>>
Android复制WIN8点击下沉倾斜系统瓷砖效果
查看>>
Bootstrap系列 -- 7. 列表排版方式
查看>>
libSVM 参数选择
查看>>
三石推荐!把 Bootstrap 小清新带回家!
查看>>
Android ContentObserver
查看>>
Linux性能分析top iostat vmstat free
查看>>
Python 2.7.9 Demo - 005.字符串判空
查看>>
ACM-简单的主题Ignatius and the Princess II——hdu1027
查看>>
C#流水号生成汇总(四)
查看>>
深入学习微框架:Spring Boot(转)
查看>>
codeforces Gym 100187B B. A Lot of Joy
查看>>