zoukankan      html  css  js  c++  java
  • Android学习笔记之View(二)

    View加载的流程之测量:rootView调用measure()→onMeasure();

    measure()是final方法,表明Android不想让开发者去修改measure的框架,开发者可以onMeasure方法。

    来看一下measure的代码:

    • public final void measure(int widthMeasureSpec, int heightMeasureSpec) {  
    •     if ((mPrivateFlags & FORCE_LAYOUT) == FORCE_LAYOUT ||  
    •             widthMeasureSpec != mOldWidthMeasureSpec ||  
    •             heightMeasureSpec != mOldHeightMeasureSpec) {  
    •         mPrivateFlags &= ~MEASURED_DIMENSION_SET;  
    •         if (ViewDebug.TRACE_HIERARCHY) {  
    •             ViewDebug.trace(this, ViewDebug.HierarchyTraceType.ON_MEASURE);  
    •         }  
    •         onMeasure(widthMeasureSpec, heightMeasureSpec);  
    •         if ((mPrivateFlags & MEASURED_DIMENSION_SET) != MEASURED_DIMENSION_SET) {  
    •             throw new IllegalStateException("onMeasure() did not set the"  
    •                     + " measured dimension by calling"  
    •                     + " setMeasuredDimension()");  
    •         }  
    •         mPrivateFlags |= LAYOUT_REQUIRED;  
    •     }  
    •     mOldWidthMeasureSpec = widthMeasureSpec;  
    •     mOldHeightMeasureSpec = heightMeasureSpec;  
    • }  

         

       

    一个界面的展示可能会涉及到很多次发measure,因为一个视图往往包含多个子视图,每个视图都需要经历一次measure过程。ViewGroup中定义了measureChildren()方法来测量子视图,下面是measureChildren():

       

    • protected void measureChildren(int widthMeasureSpec, int heightMeasureSpec) {  
    •     final int size = mChildrenCount;  
    •     final View[] children = mChildren;  
    •     for (int i = 0; i < size; ++i) {  
    •         final View child = children[i];  
    •         if ((child.mViewFlags & VISIBILITY_MASK) != GONE) {  
    •             measureChild(child, widthMeasureSpec, heightMeasureSpec);  
    •         }  
    •     }  
    • }  

       

    View加载的第二步: onLayout,这和measure差不多,都是由rootView调用layout()→onLayout()。

       

       

  • 相关阅读:
    读书笔记之:C语言核心技术
    读书笔记之:C++Primer 第4版(ch111)
    读书笔记之:C与指针
    读书笔记之:C专家编程
    读书笔记之:C/C++代码精髓
    浮点数在内存中的表示
    读书笔记之:C++Primer 第4版(ch1214)
    C/C++语言中const的用法
    比NotePad++更好的文本代码(C#)编辑器Sublime Text
    ExtJs十四(ExtJs Mvc图片管理之四)
  • 原文地址:https://www.cnblogs.com/yxx123/p/5227172.html
Copyright © 2011-2022 走看看