多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
ViewManager所定义的另外一个功能就是更新View的布局。在WindowManager中,则是更新窗口的布局。窗口的布局参数发生变化时,如LayoutParams.width从100变为了200,则需要将这个变化通知给WMS使其调整Surface的大小,并让窗口进行重绘。这个工作在WindowManagerGlobal中由updateViewLayout()函数完成。 **WindowManagerGlobal.java-->WindowManagerGlobal.updateViewLayout()** ``` publicvoid updateViewLayout(View view, ViewGroup.LayoutParams params) { ......// 参数检查 final WindowManager.LayoutParams wparams =(WindowManager.LayoutParams)params; // 将布局参数保存到控件中 view.setLayoutParams(wparams); synchronized (mLock) { // 获取窗口在三个数组中的索引 int index = findViewLocked(view, true); ViewRootImpl root = mRoots[index]; // 更新布局参数到数组中 mParams[index] = wparams; // 调用ViewRootImpl的setLayoutParams()使得新的布局参数生效 root.setLayoutParams(wparams, false); } } ``` 更新窗口布局的工作在WindowManagerGlobal中是非常简单的,主要是保存新的布局参数,然后调用ViewRootImpl.setLayoutParams()进行更新。