自定义View的实现1

自带的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等,对这些属性的设置对应的处理代码也在这个方法中完成。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容