读书笔记之安卓控件架构与自定义详解
来源:互联网 发布: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"就可以了,更加满足我们的需求。
- 读书笔记之安卓控件架构与自定义详解
- Android群英传读书笔记 第三章 Android控件架构与自定义控件详解
- 《Android群英传》读书笔记3.Android控件架构与自定义控件详解
- 3.1.Android控件架构与自定义控件详解之控件架构
- Android控件架构与自定义控件详解
- Android控件架构与自定义控件详解
- Android控件架构与自定义控件详解
- Android 控件架构与自定义控件详解
- 3.Android群英传读书笔记-控件架构与自定义控件
- 3.5.Android控件架构与自定义控件详解之自定义View(一)
- 3.5.Android控件架构与自定义控件详解之自定义View(二)
- 3.5Android控件架构与自定义控件详解之自定义View(三)
- 3.5.Android控件架构与自定义控件详解之自定义View(四)
- 3.4.Android控件架构与自定义控件详解之ViewGroup的测量与绘制
- 3.2.Android控件架构与自定义控件详解之View的测量
- 3.3.Android控件架构与自定义控件详解之View的绘制
- Android控件架构与自定义控件详解(一)
- 第3章 Android控件架构与自定义控件详解
- HttpClient介绍
- linux 字符驱动
- 剑指offer系列之41:和为s的连续整数序列
- svn学习笔记
- 三大缓存框架ehcache、memcache和redis的介绍
- 读书笔记之安卓控件架构与自定义详解
- ensureCapacity arraylist的扩容
- 当产品没有USB,没有网卡时怎么调试linux 驱动/应用程序?
- 游戏中的武器类
- 简易kmeans-c++版本
- 自定义组合控件--来自布局
- inline函数和一般的函数有什么不同
- javascript正则表达式分组-捕获性分组/非捕获性分组/正则前瞻
- Remove Duplicates from Sorted List