欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

安卓onMeasure中的测量路线

程序员文章站 2022-04-15 18:45:01
...

了解安卓OnMeasure的调用法则必须了解安卓视图的调用流程

  1. 安卓View的创建 setcontentView
  2. 安卓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 完成了测量模式

大家要把线路搞清

相关标签: 安卓开发 安卓