文章目录
- 一、在onResume中是否可以测量宽高
- 1.1 不一定能够正确的获取view的宽高
- 1.2 为什么?
- 二、那么如何在onResume中获取view的宽高呢?
- 2.0 Android 视图布局和绘制流程
- Measure, Layout 和 Draw 的顺序
- 2.1 View 的 post 方法
- 2.1.1 handler.post(Runnable)和handler.postDelay都不行
- 2.1.1 View.post(Runnable)可以
- 2.1.2 为什么View.post(Runnable) 可以获取到 View 的宽高?
- 2.2 ViewTreeObserver 的OnGlobalLayoutListener
- 2.2.1 使用`ViewTreeObserver.OnGlobalLayoutListener` 确保正确测量
- 2.2.2 为什么 `ViewTreeObserver.OnGlobalLayoutListener` 可以确保正确测量
- 2.3 使用 LayoutChangeListener
- 2.3.1 使用`View.OnLayoutChangeListener` 确保正确测量
- 2.3.2 为什么 `View.OnLayoutChangeListener` 可以确保正确测量
- 2.4 总结
- 三、总结
一、在onResume中是否可以测量宽高
1.1 不一定能够正确的获取view的宽高
这个问题答案是:不一定能够正确的获取view的宽高,然后我们要分析原因,然后我们还要讲解解决办法。
-
如果是
activity
启动后第一次进入onResume
生命周期,那么获取到的View
的宽高是错误的; -
如果是从其他
activity
回到当前activity
而执行的onResume
方法,那么就能够获取到View
的宽高。
1.2 为什么?
究其原因如下:
首先我们要找到系统调用 onResume
的地方,大家可以看到 ActivityThread
类,在这个类中有一个函数handleResumeActivity
,这个函数在下面我们只保留了核心代码。
handleResumeActivity() {//...