外观
View 的 measure layout draw 分别做什么?
标准回答
measure 决定测量宽高,layout 决定实际位置与边界,draw 把内容绘制出来。父容器向下传约束,子 View 在约束内给出尺寸,父容器再安排子 View 的位置。自定义 View 常重写 onMeasure 和 onDraw,自定义 ViewGroup 还要安排子项测量与 onLayout。
机制解释
measure 与 layout 不必永远只执行一次。复杂嵌套、权重或约束可能增加测量次数。View 在构造函数和 onCreate 中可能尚未完成布局,直接读 getWidth 往往得到 0。
延伸追问
何时获取稳定尺寸?根据用途用 onSizeChanged、布局监听等,并处理后续尺寸变化。post 常能延后执行,但不应把它当作所有场景“尺寸一定就绪”的严格保证。
内容来源
- Android 智能硬件 SDK 技术 Wiki · 原条目
Q09