获取计算的视图尺寸

请注意,与 View 实例关联的 ViewTreeObserver 实例可能无效,而 View 仍处于活动状态。来自 View.getViewTreeObserver javadocs:

// The returned ViewTreeObserver observer is not guaranteed to remain
// valid for the lifetime of this View. If the caller of this method keeps
// a long-lived reference to ViewTreeObserver, it should always check for
// the return value of {@link ViewTreeObserver#isAlive()}.

因此,如果你之前已经向 ViewTreeObserver 实例添加了一个监听器并且现在希望将其删除,则最简单的方法是再次在相应的 View 实例上调用 getViewTreeObserver 以接收新的 ViewTreeObserver 实例。 (在现有实例上检查 isAlive 是一项效果较差的工作;如果 ViewTreeObserver 不再存在,那么无论如何你都会获得新的参考!)