读书笔记之安卓控件架构与自定义详解

来源:互联网 发布:sql什么意思 编辑:程序博客网 时间:2024/06/03 20:28


1.安卓控件架构


安卓中控件分为两类:viewgroup控件和view控件,view group控件作为父控件可以包含多个view控件,并管理它们。

上层控件负责下层控件的测量与绘制,并传递交互事件。每个ac都包括一个window对象,通常是phone window。

UI界面的架构:

就是activity>phone window>decor view>(title view , content view) ,呈包含关系,我们常常的setContentView就是这个content  view了。

标准视图树:

decor view 下面有view group ,然后下面分为actionbar container 和frame layout ,frame layout 下面就是我们的主布局文件了。


2.View的测量


安卓系统在绘制一个view之前,会对它先进行测量,即告诉系统该画一个多大的view。这个就在onMeasure();方法中进行。

测量的模式有三种:

EXACTLY:就是我们控件的layout_width或layout_height属性为具体数值或者指定为match_parent属性时。

AT_MOST:就是我们控件的layout_width或layout_height属性为具体数值或者指定为wrap_content属性时。

第三种不常用这里就不说,view类默认的onMeasure()方法只支持EXACTLY模式,如果不重写onmeasure方法的话就必须是这种模式,如果自定义view是wrap_content属性的时候就必须重写这个方法了。

具体使用过程:

我们自定义一个类继承view,然后在布局文件里指定我们自定义的view看他的layout_width和layout_height属性是什么,根据上文说的,看是否需要重写onMeasure方法。

具体onMeasure方法的书写也比较简单有模版,请读者自行查阅。这里就不详细说啦。


3.View绘制

当测量好了一个view的时候,我们就可以简单的重写onDraw()方法,并在canvas对象上来绘制所需要的图形。

要想在安卓的界面中绘制相应的图形,就必须在canvas上进行绘制,它就像画板一样,然后使用画笔paint就可以在上面作画了。通常需要通过继承View并重写他的onDraw()方法。


通过对2.3两个的简单介绍之后,大家就可以学习使用自定义view了。具体的这里就不细说来,大家尝试着自己些几个实例。像什么闪动的文字效果,自定义修改的textview等等,如果有需要源码可以联系我。qq:434638973


4.创建复合控件,也就是我们常常说的UI模版

我们可以在平时的生活中看到很多app他们的每个界面有的部分就是文字换了而已,其它基本没变,如果我们每个都去单独写可想而知会很复杂,因此今天的重点就是创建出具有很好重用功能的控件集合。把这些界面抽象出来,形成一个通用的UI组件。下面我们就看看如何创建一个这样的UI模版。首先,这个模版应该具有通用和可定制性,也就是说我们需要给调用者以丰富的接口,让他们可以更改模版中的文字,颜色,行为等信息,而不是所有的模版都一样,这样就失去了模版的意义。


具体流程如下:

1.先定义属性,在values目录下创建一个attrs.xml的属性定义文件。比如可以在里面定义标题文字的字体大小颜色,按钮的文字颜色背景等等属性,并用format指定属性的类型。

在确定好属性之后,就可以创建一个自定义控件了-TopBar,根据布局可以让它继承relativelayout或者其他的都ok。

2.创建一个topbar类继承relativelayout,然后在里面获取属性,为textview,按钮赋值设置监听器设置属性等等,当然属性值现在还没有设置,在布局文件中,使用2自定义的topbar布局,然后给每个属性都赋上值,还要注意xmlns:custom="http://schemas.android.com/apk/res-auto不要丢了。否则失去关联,这样系统获取这些属性的时候就会到布局文件里来找。再更进一步将这个ui模版单独写到一个布局文件中,这样在主布局文件中,只要使用<include layput="@layout/topbar"就可以了,更加满足我们的需求。




0 0
原创粉丝点击