自定义属性的简单用法

1.自定义的属性  首先要在attr的xml文件中 注册-----格式:
<declare-stylable  name=决定使用这个自定义属性的自定义控件名(A)>
          <attr name =决定这个自定义控件的自定义属性名(a) format=决定这个自定义属性的类型> <\item>
         <attr name =决定这个自定义控件的自定义属性名         format=当这个类型为enum之类的可以这么写> 
<enmu name=决定这enum的名字  value="0"></enum>
<enmu name=决定这enum的名字  value="1"></enum>
<\item>

2. 先简单的在java中进行一个类的建立   名字为CustomView.java 

 

3.在xml中的属性设置  

 先建立命名空间 xmlns:app="http://schemas.android.com/apk/res-auto"


                然后在xml中使用这个

<包名.CustomView>


一般的属性设置(省略)

自定义属性的设置
app:自定义属性的名字A=要求的参数类型a
         //和上面的<attr name =决定这个自定义控件的自定义属性名(a) format=决定这个自定义属性的类型(a)> <\item>对应起来
 //这里注意这个枚举类型的

app:自定义属性(枚举类型)=enmu的name(这里的value用在了哪里?就在代码中获取的属性) 


</包名.CustomView>

4.回到第二步 即回到CustomView.java中  
我们的构造方法 肯定要用到布局的构造函数了
  public RatioLayout(Context context, AttributeSet attrs) {
       super(context, attrs);
        initAttrs(context, attrs);}

在这个函数中  有attrs的变量。其实 所以的xml布局中的属性都是从这里来获取的
我们要获取的是不是就是我们自定义的属性  

在 initAttrs(context, attrs);方法中来做
//获取一个TypedArray对象
try{
  TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RatioLayout);

Float value= typedArray.getFloat(R.styleable.A(自定义控件的名字,在attr文件中)_a(自定义属性的名字), 默认值);
}finnaly{
注意这个getXXX方法对应的XXX就是在自定义属性的类型,获取的值value就是xml中的属性的值


       typedArray.recycle();
//注意这个typedArray要记得回收 -- 可以看  http://blog.csdn.net/Monicabg/article/details/45014327 这篇博文  
}
//这个typedArray对象是没有构造方法的,他是从池中获取,用完了就要放回池中,典型的单例模式

 为什么这么做?因为有大量的这个创建attr的过程,每次activity重启之类的都要这样  太耗费资源了。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值