Android重点知识——View
和ViewGroup
与自定义控件
作者:丁明祥
邮箱:[email protected]
一、基础
1.概念
Android中的View包含用户交互和显示,ViewGroup继承自View,主要充当View的容器。
ViewGroup和它的孩子们(View和ViewGroup)以树形结构形成了一个层次结构,View类有接受和处理消息的功能,android系统所产生的消息会在这些ViewGroup和 View之间传递。
2.在自定义控件时继承ViewGroup和View的区别(这个地方上次面试被坑了一把)
测量:onMeasure()
设置自己显示在屏幕上的宽高(自定义View中不一定要用,在ViewGroup中使用到)
布局:onLayout()
设置自己显示在屏幕上的位置(自定义View中一定不实用,只有在自定义ViewGroup中用到)
绘制:onDraw()
在显示屏幕中绘制(自定义View中一定使用到,但自定义Viewgroup时不需要)
自定义ViewGroup:
自定义View:
二、深入(这一部分可能还要长期修改,)
3.深入Android中的View和ViewGroup
要理解Android中的View和ViewGroup必须要理解,
在我们写Android布局文件的时候,会告诉布局文件(容器)我们的View的宽度,高度,对齐方式,margin等,所以:
- ViewGroup的职能为:给childView计算出建议的宽和高和测量模式 ,决定childView的位置。
- View的职责,根据测量模式和ViewGroup给出的建议的宽和高,计算出自己的宽和高,同时在ViewGroup中绘制。
从API角度来看:
- View的根据ViewGroup传人的测量值和模式,对自己宽高进行确定(onMeasure中完成),然后在onDraw中完成对自己的绘制
- ViewGroup需要给View传入view的测量值和模式(onMeasure中完成),而且对于此ViewGroup的父布局,自己也需要在onMeasure中完成对自己宽和高的确定。此外,需要在onLayout中完成对其childView的位置的指定。
3.1 作为容器的ViewGroup
ViewGroup是一个容器,其采用一个数组来存储这些子View 实现private View[] mChildren;
3.2 ViewGroup中的增删查算法
由于是通过一个数组来存储View数据的,所以对于ViewGroup来说其必须实现增、删、查的算法。
- 增加
- 移除
- 查询