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
app:自定义属性的名字A=要求的参数类型a
//和上面的<attr name =决定这个自定义控件的自定义属性名(a) format=决定这个自定义属性的类型(a)> <\item>对应起来
//这里注意这个枚举类型的
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对象是没有构造方法的,他是从池中获取,用完了就要放回池中,典型的单例模式
<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用在了哪里?就在代码中获取的属性)
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重启之类的都要这样 太耗费资源了。