自定义View的实现1

作者: 陈利健 | 来源:发表于2015-01-09 22:20 被阅读242次

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

    相关文章

      网友评论

      本文标题:自定义View的实现1

      本文链接:https://www.haomeiwen.com/subject/obsfxttx.html