Android View System概论

来源:互联网 发布:国外数据新闻案例分析 编辑:程序博客网 时间:2024/06/07 18:45

Android View可能是Android中最复杂的部分

Android View System 的职责

  • 测量各个UI元素的尺寸
  • 确定各个UI的位置
  • 内容发生变化时重绘
  • 接收事件、分配事件
  • 处理来自wms的很多和窗口状态有关的回调

脱离了Activity的View

日常中View和Activity脱不离关系(Activity.setContentView)。先看一个另类的方法:

//在一个Service中调用        final WindowManager wm= (WindowManager)getSystemService(Context.WINDOW_SERVICE);        final Button btn = new Button(getBaseContext());        btn.setText("click me!");        WindowManager.LayoutParams params = new WindowManager.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);        params.gravity = Gravity.CENTER;        params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;        params.type = WindowManager.LayoutParams.TYPE_PHONE;        wm.addView(btn,params);

WindowManager继承自ViewManager,实际上是一个接口。可以看做是WMS的代理类。

View的组成部分(Framework层)

其实,控件系统实际可以看做是View的一系列子类和WindowManager两个部分。

WindowsManagerImpl

实际上也是一个代理类,工作交给了WindowManagerGlobal,
负责保存Display 和 Window

WindowManagerGlobal

单例模式
保存进程内的所有view。
具体的工作还是交给了RootViewImpl完成。

ViewRootImpl

View系统中最重要的一环

控件系统的心跳

performTravesal()

此方法的主要步骤划分:
1. 预测量
2. 布局窗口
3. 最终测量
4. 布局控件树
5. 绘制

0 0
原创粉丝点击