7.1 Android的控件框架
Android控件框架,指的是Android控件设计的基本理念和整体构成。每一个个体都是整体的一部分,在具体了解Android控件前,开发者需要先理解整个控件框架的设计和特征。
7.1.1 Android控件构成
控件是构建应用交互界面的基本单元,每个控件都会占据整个交互界面内的一块矩形区域,负责该区域内的界面绘制和事件处理。
Android的控件都派生自android.view.View类,在android.widget包中定义了大量的系统控件供开发者使用,开发者也可以从View类及其子类中,派生出自定义的控件。
Android中有一类重要的控件,称为容器控件(View Group),它们派生自View的子类android.view.ViewGroup。每个容器控件都可以作为父控件存在,其中包含若干个子控件,每个子控件占据其父控件中的一块区域,统一由父控件进行管理和支配。
如图7-1所示,通过容器控件,可将交互界面上的各个控件对象组织成控件树。上层的父控件会负责其下层子控件的排列和绘制,并将交互事件自上而下传递到子控件中。每棵控件树,都会有一个android.view.ViewParent对象与其根控件绑定,该ViewParent对象是整棵控件树中交互事件的控制枢纽,它会负责将用户操作产生的交互事件传递到控件树的根控件,进而自顶向下进行传播。控件树中的每个控件对象,都会包含指向该ViewParent对象的指针,当子控件对象的焦点、尺寸等控件属性发生改变时,会通知该控件树的ViewParent对象,由ViewParent对象统一向下分发该事件。
图 7-1 任务和界面组件栈示例
交互界面中控件的关系直观上是极其复杂的,每个控件的变化都可能影响到周围的若干控件。Android将控件对象之间的联系抽象为树形结构,从而简化了控件之间的关系—每个控件只会受其父控件的控制,而不会被其他控件影响。为了保证调控的整体性,Android为控件树增加了一个统一的交互事件管理对象ViewParent,它可以从整体上对控件树的变化进行调度,避免了控件对象彼此间的局部通信,从而大大降低控件对象间的耦合性。