您的位置:首页 > 移动开发 > Android开发

Android View System概论

2016-04-17 13:33 417 查看
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. 绘制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: