[TOC]

概述

前面的深度解析中,我们在View执行requestlayout的布局逻辑中,有这样两行代码:

1
2
mPrivateFlags |= PFLAG_FORCE_LAYOUT;
mPrivateFlags |= PFLAG_INVALIDATED;

函数给当前View设置了两个flag:PFLAG_FORCE_LAYOUT和PFLAG_INVALIDATED

View中mPrivateFlags字段

View内部有个int类型的mPrivateFlags字段,这个字段会View的整个显示流程进行控制,就相当于我们平时开发时,自定义的一系列的boolean值。

它的工作原理是位运算,这里拿PFLAG_FORCE_LAYOUT举例,通过调用mPrivateFlags |= PFLAG_FORCE_LAYOUT将mPrivateFlags的PFLAG_FORCE_LAYOUT位设置为1,不设置的情况下是0。当设置为1的时候,意味着当前View有个操作需要执行或者某项操作已经执行完了,然后设置成1标记状态。

除了PFLAG_FORCE_LAYOUT,View内部还有很多的Flag位,后面我们会一一看到。那这里将PFLAG_FORCE_LAYOUT位设置位1,就意味着当前的View需要重新布局,重新显示,后面也会有对这个标志位的判断。