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()。

       

       

  • 相关阅读:
    ruby 中的respond_to (转)
    outlook最小化到托盘的设置方法
    FCKeditor 在VS2008下的用法
    暴风影音2009开机启动关闭方法
    构建自己的不可替代性
    MySQL安装1045错解决办法(绝对经典)
    如何学好C++,用好类库很重要
    转:什么是重构
    转:C++堆与栈的区别
    SQL Server 中的索引
  • 原文地址:https://www.cnblogs.com/yxx123/p/5227172.html
Copyright © 2011-2022 走看看