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

       

       

  • 相关阅读:
    linux环境weblogic开启远程调试
    C#相关资料
    pyqt5,pyside2学习过程中问题与疑惑记录--先记下问题,然后逐个解决
    任务记录-2020.10.1
    猜想:假如时间的快慢与物体的质量有关系。那长大之后,感觉时间过得越来越快,是不是大脑或者身体中某一个器官越长越大,然后导致时间越过越快。。。
    学习思路--学习一个新的东西,从哪些方面着手
    java bug记录
    记录要做的事情,把sql字符串替换写成工具网页。
    使用java代码本地测试远程rpc接口
    任务记录
  • 原文地址:https://www.cnblogs.com/yxx123/p/5227172.html
Copyright © 2011-2022 走看看