自定义view(一)
2016-03-11 15:54
387 查看
自定义view首先要继承一个view或者view的子类如button
且子类最少有一个构造方法包含Context和AttributeSet
Context用来处理上下文信息
AttributeSet用来获取XML
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);
}//第三个方法一般不会直接调用。可以通过第二个方法去调用。
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。
需要先添加资源到你的项目中。放置于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中读取属性。
且子类最少有一个构造方法包含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中读取属性。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories