咨询ViewCompat.isLaidOut方法中‘through at least one layout’的具体含义
关于ViewCompat.isLaidOut()中"through at least one layout"的含义解析
ViewCompat类的isLaidOut方法描述如下:
Returns true if view has been through at least one layout since it was last attached to or detached from a window.我无法理解其中‘through at least one layout’的含义。在我的认知里,‘layout’指LinearLayout、FrameLayout这类放置View的布局容器,我原本猜测该方法可能用于检查通过代码创建但未加入任何布局的View。但‘through at least one layout’表示该过程可发生多次,这让我完全困惑,请问该短语具体指什么?
这里的layout不是指LinearLayout这类布局容器,而是指Android视图系统中View的布局计算过程,也就是视图生命周期里的onLayout()阶段:
- 当View被附加到窗口(attach)或者从窗口分离(detach)后,只要视图系统完成过至少一次完整的布局流程(确定View的位置、宽高的计算过程),
isLaidOut()就会返回true。 - 这个布局过程可以重复触发:比如屏幕旋转、父布局尺寸改变、手动调用
requestLayout(),这些场景都会让视图系统重新执行布局阶段,每一次执行都算一次“layout”。 - 举个实际场景:用代码new出一个TextView,此时它还没关联到窗口,
isLaidOut()返回false;把它添加到Activity的布局容器后,视图系统完成第一次布局,方法返回true;之后屏幕发生旋转,系统再次执行布局流程,方法依然返回true——因为从上次attach后已经经过了至少一次布局。
内容的提问来源于stack exchange,提问作者Alexey Simchenko
相关产品推荐
相关产品推荐

