自定义view(一)

自定义view首先要继承一个view或者view的子类如button
且子类最少有一个构造方法包含Context和AttributeSet
Context用来处理上下文信息
AttributeSet用来获取XML

1.构造方法

public CustomerView(Context context) {
super(context);
}//第一个方法主要用在coder中调用
public CustomerView(Context context, AttributeSet attrs) {
super(context, attrs);
// this(context, attrs, R.attr.customerstyle);//可以为控件指定style
}//第二个方法可以通过XML调用
public CustomerView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}//第三个方法一般不会直接调用。可以通过第二个方法去调用。

2.添加自定义view的属性

一个良好的自定义view可以自定义属性。定义好的属性可以通过XML直接调用,也可以通过code直接设置。拿一个类型为bool的test属性来来举例。

1.coder中设置属性

在coder中获取设置test属性。

public Boolean getTestBoolean() {
return test;
}
public void setTestBoolean(Boolean boolean1) {
this.test = boolean1;
invalidate();
requestLayout();
}
请注意,在setTestBoolean方法里面有调用invalidate()和requestLayout()。
这两个调用是确保稳定运行的关键。
invalidate用来重新绘制空间内容
requestLayout用来重新确定view的大小
需要调用调用时若忘了这两个方法,将会导致hard-to-find bugs。

2.xml中设置属性

为了定义在xml中设置自定义属性。
需要先添加资源到你的项目中。放置于res/values/attrs.xml文件中。下面是一个attrs.xml文件的示例:
这里写图片描述
在XML中需要先声明命名空间。命名空间是你的http://schemas.android.com/apk/res/[your package name]
我的包名是com.test.customer。所以我的命名空间是

这里写图片描述

设置好命名空间就可以直接在view中使用customer的属性
这里写图片描述

可以通过构造方法中的AttributeSet获取xml中的属性
这里写图片描述

虽然可以直接从Attribute获取xml属性,但是不推荐这样用。因为这样做拥有属性的资源并没有经过解析。容易发生错误。
通过obtainStyledAttributes()来获取属性值会更加容易。对res目录里的每一个资源,自动生成的R.java文件定义了存放属性ID的数组和常量,常量用来索引数组中每个属性。你可以使用这些预先定义的常量来从TypedArray中读取属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值