自带的View满足不了设计的要求,就需要自定义View控件。1.首先要实现一个继承自View的类。2.添加类的构造方法,override父类的方法,如onDraw,onMeasure等。3.如果自定义的View有自己的属性,需要在values下建立attrs.xml文件,在其中定义属性,同时代码也要做修改。
构造方法:
public MyView(Context context,AttributeSet attrs){
super(context, attrs);
}
在xml文件(main.xml)中也需要进行如下操作:
<com.example.xhelloworld.NewView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
至少在xml文件中写上上面的内容。其中com.example.xhelloworld.NewView 这句是需要显示的控件所代表的类。com.example.xhelloworld是类的包名,NewView是类名。
完成上面的两步之后就可以在代码中实例化这个布局文件了。
自定义属性设置(如果有自定义的属性)
1.在values目录下建立attrs.xml文件,添加属性内容
2.在布局文件中添加新的命名空间xmlns,然后可以使用命名空间给自定义的空间设置属性
3.设置完属性之后,当然还要对其进行处理。在自定义View类中的构造方法中进行处理
首先添加attrs.xml文件,在定义属性就是说,我们这样一个控件MyView,需要2个自定义属性textColor 和textSize
然后在布局文件中完成何谓命名空间? xmlns = xml name space.
对于自定义View我们要加一个命名空间,不能以android:开头,所以我们随便命名一个,名字没有特别的考究,本例中我们用my。 格式如上面的代码所示,注意后面的这个包名是“我们当前应用的包名”,而不是自定义View所在的包名。
我们可以看到,下面有两条以android:开头的属性,说明这两个属性是android命名空间下的。然后两条以my:开头的属性,说明这是我们自定义属性命名空间下的。命名空间就是这个作用,定义了命名空间才能使用这个空间下的属性。查看源文件就知道,其实诸如android命名空间下的组件的属性,比如LinearLayout的width,其实就是 <attr name =" width",format= "float"/>
最后在MyView.java中添加另一个构造方法,并添加代码来处理从xml中获得的属性背后的事:View类的构造方法:
·public view(Context context) //当在代码中创建对象时会被调用
·public View (Contextcontext,AttributeSetattrs) //这个方法是通过xml文件来创建一个view对象的时候调用。很显然xml文件一般是布局文件,就是现实控件的时候调用,而布局文件中免不了会有属性的设置,如android:layout_width等,对这些属性的设置对应的处理代码也在这个方法中完成。
网友评论