在上一篇我们分析了view的measure()流程,当我们把view测量出来以后,接着就要算出这个view的在这个屏幕的具体位置,所以这一篇我们接着分析layout()流程,废话不多说,还是先来一张流程图,下面会根据这个流程图进行讲解
-
注意:RootView是一个FrameLayout,所以也是一个ViewGroup
-
-
layout()过程和measure()过程一样,起点都是在ViewRootImpl中的performTraverals()方法,在performTraverals()中我们又调用了performLayout(),所以我们直接从performLayout()方法开始分析,先贴上performLayout()的源码:
-
private void performLayout(WindowManager.LayoutParams lp, int desiredWindowWidth,
int desiredWindowHeight) {
/**省略部分代码
host.layout(0, 0, host.getMeasuredWidth(), host.getMeasuredHeight());
mHandlingLayoutInLayoutRequest = false;
// Check the valid requests again, this time without checking/clearing the
// layout flags, since requests happenin