安卓onMeasure中的测量路线
程序员文章站
2022-04-15 18:45:01
...
了解安卓OnMeasure的调用法则必须了解安卓视图的调用流程
- 安卓View的创建 setcontentView
- 安卓View的测量/布局/绘制 onResume中
setcontentViewjinjin是对View xml的解析并封装成了class文件
其中 会生成decorView
而在安卓中decorView的onMeasure方法是在哪儿调用的呢 ?
安卓中的decorView的onMeasure是在ViewRootLmpl中
private void performMeasure(int childWidthMeasureSpec, int childHeightMeasureSpec) {
if (mView == null) {
return;
}
Trace.traceBegin(Trace.TRACE_TAG_VIEW, "measure");
try {
mView.measure(childWidthMeasureSpec, childHeightMeasureSpec);
} finally {
Trace.traceEnd(Trace.TRACE_TAG_VIEW);
}
}
很多人可能会觉得这方法是View中的 是的View会自动调用到onMeasure方法
注意decorView继承至FrameLayout
这里就调用到了decorView的onMeasure方法
而其中supe.onMeasure方法 会调用到Framelayout中的onMeasure方法
通过其中的measureChildWithMargins 方法会将测量分发给每一个子View 而子View拿到的测量模式方法是自己的 而不是父View的
因为measureChildWithMargins ->getChildMeasureSpec (ViewGroup) 获取到了自己的测量模式
//总结 View的onmeasure方法是从ViewRootlmpl ->View->decorView->Framelayout->子View 完成了测量模式
大家要把线路搞清
上一篇: 导致crash等异常的常见原因分析
下一篇: 修改图片的尺寸大小