您的位置:首页 > 移动开发 > Android开发

自定义view(一)

2016-03-11 15:54 387 查看
自定义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中读取属性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android