View学习笔记(1)-Android控件架构

笔记来自Android群英传与Android开发艺术探究。

Android中控件被分为两类:View、ViewGroup,每个控件都会在界面中占得一块矩形区域。

ViewGroup控件作为父控件可以包含多个View控件,并管理其包含的View控件。其职责可定义为:给出子View建议的高和宽、测量模式以及决定子view的位置。(子view的高宽属性定义为warp_content时只有其自身才能计算出精确的高度和宽度)


abstract class ViewGroup extends View implements ViewParent, ViewManager

//Defines the responsibilities for a class that will be a parent of a View
public interface ViewParent {
    *****
}
//Interface to let you add and remove child views to an Activity
public interface ViewManager
{
    public void addView(View view, ViewGroup.LayoutParams params);
    public void updateViewLayout(View view, ViewGroup.LayoutParams params);
    public void removeView(View view);
}

在Android设计中ViewGroup也继承了View,所以view本身就可以是单个控件也可以是是多个控件组成的一组控件。

 class View implements Drawable.Callback, KeyEvent.Callback,AccessibilityEventSource

通过ViewGroup整个界面上的控件形成了一个view树型结构即view树。上层控件负责下层子控件的测量与绘制,并传递交互事件。控件树种以树的深度优先遍历来查找对应的元素(findViewById)。
在每棵控件树的顶部,都有一个ViewParent对象,这就是整棵树的控制中心,所有的交互事件都由它来统一调度和分配。
view.xml的树形结构 这里写图片描述
每个Activity都包含一个Window对象(abstract),具体由PhoneWindow实现

public class PhoneWindow extends Window implements MenuBuilder.Callback {
***
// This is the top-level view of the window, containing the window decor.
    private DecorView mDecor;

***
  }

private final class DecorView extends FrameLayout implements RootViewSurfaceTaker {
  ****
  }

PhoneWindow将一个DecorView作为整个应用窗口的根view。DecorView作为窗口界面的顶层视图,封装了一些窗口操作的通用方法。可以说decorview将要显示的具体内容呈现在phonewindow上,这里面所有view的监听事件都通过WindowManagerService来接收,并通过activity对象回调相应的OnClickListener.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值