2021年1月22日更新
最近的项目中遇到了一个比较棘手的问题,和view的绘制流程有关,正好接这个机会再学习一下view。
首先来看一下view的层级关系
phonewindow是根window,作为activity和view交互的接口
decorView本质是一个frameLayout,有一个唯一的子view,linearlayout
contentview即我们通常所使用的自定义的布局,本质是framelayout,通过setcontentview加载了布局,然后通过三大流程(接下来会讲)将decorView添加到window中。
view的绘制流程:
onMeasure() 测量view大小,onLayout()递归确定子view尺寸和位置,onDraw()绘制
生命周期中view绘制时机:
onCreate->onResume->onMeasure->onLayout->onWindowFocusChanged->…onDraw…
当执行完onLayout方法之后,子view的大小便确定下来了,我们就可以获取宽高
获取宽高的方法:
安卓中获取view宽高有两组方法,getMeasuredWidth() getMeasuredHeight()和g